C'è un modo per definire i propri operatori in F #?Puoi definire i tuoi operatori in F #?
Se così può qualcuno darmi un esempio per questo? Ho cercato brevemente, ma non ho trovato nulla.
C'è un modo per definire i propri operatori in F #?Puoi definire i tuoi operatori in F #?
Se così può qualcuno darmi un esempio per questo? Ho cercato brevemente, ma non ho trovato nulla.
Sì:
let (+.) x s = [for y in s -> x + y]
let s = 1 +. [2;3;4]
I caratteri che possono essere utilizzati in un F # operatore sono elencati in section 3.7 of the spec. Sono !%&*+-./<=>@^|~
e per qualsiasi carattere dopo il primo, ?
. Precedenza e fissità sono determinati dal primo carattere dell'operatore (vedere le specifiche).
È possibile creare i propri operatori let-bound come ho fatto sopra, nel qual caso funzionano esattamente come funzioni rilegate. È inoltre possibile definire come membri su un tipo:
type 'a Wrapper = Wrapper of 'a with
static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y)
let w = (Wrapper 1) +! (Wrapper 2)
In questo caso, non è necessario aver pre-definito una funzione let-bound per utilizzare l'operatore; F # lo troverà sul tipo. Si può prendere in particolare buon vantaggio di questo utilizzando le definizioni in linea:
let inline addSpecial a b = a +! b
let w2 = addSpecial w (Wrapper 3)
Prendendo questo ancora di più, è possibile effettuare gli operatori sui vostri tipi in linea e, in modo da poterli utilizzare su una varietà ancora più ampia di casi di la tua 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
sezione 4.4 (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html) ha ulteriori informazioni sugli operatori di infisso e quali caratteri sono consentiti. – nlucaroni
Per il tuo futuro riferimento Joan - il concetto si chiama overloading dell'operatore. Se tu F # di Google e Overloading dell'operatore troverai un bel po 'sull'argomento. –
Grazie, lo farò in futuro. –