Tout d'abord, j'ai une meilleure méthode de traitement de ce problème, donc ce n'est pas un problème.F #: comportement d'inférence de type impair
Cependant, c'est quelque chose que je ne comprends pas. Quelqu'un peut-il expliquer cela?
Quand je définit la fonction d'échange comme:
namespace Utilities
module Misc
let Swap (left : 'a byref) (right : 'a byref) =
let temp = left
left <- right
right <- temp
Je suis en mesure d'utiliser la fonction de swap comme celui-ci très bien.
Misc.Swap (&s.[i]) (&s.[j])
Mais quand je définis le module comme:
namespace Utilities
type Misc =
static member Swap (left : 'a byref) (right : 'a byref) =
let temp = left
left <- right
right <- temp
Je reçois l'erreur suivante sur les deux arguments:
This expression has type 'b byref but is here used with type 'a ref
Comment l'inférence de type pour les arguments de l'appelant changement en déplaçant la fonction dans un type?
Merci pour cette question; nous allons probablement modifier la spécification de langage pour interdire l'utilisation de paramètres au curry 'byref' car une application partielle essaierait de capturer un byref et ce n'est pas bon. :) – Brian