Existe-t-il un moyen de définir vos propres opérateurs en F #?Pouvez-vous définir vos propres opérateurs en F #?
Si oui, quelqu'un peut-il me donner un exemple pour cela? J'ai cherché brièvement, mais je n'ai rien trouvé.
Existe-t-il un moyen de définir vos propres opérateurs en F #?Pouvez-vous définir vos propres opérateurs en F #?
Si oui, quelqu'un peut-il me donner un exemple pour cela? J'ai cherché brièvement, mais je n'ai rien trouvé.
Oui:
let (+.) x s = [for y in s -> x + y]
let s = 1 +. [2;3;4]
Les caractères qui peuvent être utilisés dans un opérateur F # sont répertoriés dans section 3.7 of the spec. Ils sont !%&*+-./<=>@^|~
et pour tout caractère après le premier, ?
. La préséance et la fixité sont déterminées par le premier caractère de l'opérateur (voir la spécification).
Vous pouvez créer vos propres opérateurs let-bound comme je l'ai fait ci-dessus, auquel cas ils fonctionnent comme des fonctions let-bound. Vous pouvez également les définir en tant que membres d'un type:
type 'a Wrapper = Wrapper of 'a with
static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let w = (Wrapper 1) +! (Wrapper 2)
Dans ce cas, vous n'avez pas besoin d'avoir une pré-défini une fonction liée à laisser utiliser l'opérateur; F # le trouvera sur le type. Vous pouvez prendre particulièrement bon avantage de cela en utilisant des définitions inline:
let inline addSpecial a b = a +! b
let w2 = addSpecial w (Wrapper 3)
Prenant encore plus loin, vous pouvez faire en ligne les opérateurs sur vos types aussi bien, de sorte que vous pouvez les utiliser sur une variété encore plus large des instances de votre classe:
type 'a Wrapper = Wrapper of 'a with
static member inline (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let wi = (Wrapper 1) +! (Wrapper 2)
let wf = (Wrapper 1.0) +! (Wrapper 2.0)
let wi2 = addSpecial wi wi
let wf2 = addSpecial wf wf
section 4.4 (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html) contient plus d'informations sur les opérateurs infixes et les caractères autorisés. – nlucaroni
Pour votre future référence Joan - le concept est appelé la surcharge de l'opérateur. Si vous utilisez Google F # et la surcharge d'un opérateur, vous en trouverez un peu sur le sujet. –
Merci, le fera à l'avenir. –