Impossible de définir la surcharge de l'opérateur sur le type (?):F # opérateur de recherche dynamique surcharge
type Foo =
val s : string
new(s) = { s = s }
static member (?) (foo : Foo, name : string) = foo.s + name
let foo = Foo("hello, ")
let hw = foo? world
// error FS0043: The member or object constructor 'op_Dynamic'
// takes 2 argument(s) but is here given 1. The required signature
// is 'static member Foo.(?) : foo:Foo * name:string -> string'.
Tout fonctionne très bien si j'utilise autonome laisser contraignant pour la définition de l'opérateur:
let (?) (foo : Foo) (name : string) = foo.s + name
let hw = foo? world
Mais je dois spécifier l'opérateur op_Dynamic
directement pour le type Foo
. Quel est le problème avec le premier extrait de code?
En utilisant F# 1.9.7.4
@ Visual Studio 2010 Beta2
manière plus facile?!? Oui, cela fonctionne, mais pourquoi je devrais mettre cette solution de contournement "inline (?)" Dans n'importe quelle classe avec un opérateur surchargé (?) Juste pour l'utiliser? Pourquoi je ne peux pas utiliser la surcharge d'opérateur définie directement? – ControlFlow
Oui, il s'avère qu'il y a un bug dans l'analyseur F # et votre code original devrait fonctionner. Merci de l'avoir signalé! J'ai classé le bug. – Brian