2010-02-05 11 views
9

¿Hay alguna manera de definir sus propios operadores en F #?¿Puedes definir tus propios operadores en F #?

Si es así, ¿alguien me puede dar un ejemplo para esto? Busqué brevemente, pero no pude encontrar nada.

+0

Para su futura referencia Joan - el concepto se llama sobrecarga del operador. Si busca Google F # y Operator Overloading, encontrará bastante sobre el tema. –

+0

Gracias, haremos eso en el futuro. –

Respuesta

25

Sí:

let (+.) x s = [for y in s -> x + y] 
let s = 1 +. [2;3;4] 

Los caracteres que se pueden utilizar en un operador # F se enumeran en section 3.7 of the spec. Son !%&*+-./<=>@^|~ y para cualquier personaje después del primero, ?. La precedencia y la fijeza están determinadas por el primer carácter del operador (ver la especificación).

Puede crear sus propios operadores de alquiler, como he hecho anteriormente, en cuyo caso funcionan igual que las funciones de acceso restringido. También se puede definir como miembros de un tipo:

type 'a Wrapper = Wrapper of 'a with 
    static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y) 

let w = (Wrapper 1) +! (Wrapper 2) 

En este caso, no es necesario haber pre-definido una función let-obligado a utilizar el operador; F # lo encontrará en el tipo. Puede tomar particularmente buena ventaja de esto utilizando las definiciones en línea:

let inline addSpecial a b = a +! b 
let w2 = addSpecial w (Wrapper 3) 

Teniendo esto aún más, puede hacer que los operadores en sus tipos en línea, así, de modo que usted puede utilizar en una variedad aún más amplia de casos de su clase:

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 
+3

sección 4.4 (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html) tiene más información sobre los operadores de infijo y qué caracteres son permitidos. – nlucaroni

Cuestiones relacionadas