Ad esempio, il seguente non è consentito, e non so perché:Perché il tipo di funzione di prima classe non può contenere byrefs?
> let f() =
let f2 (a : byref<int>) =
()
let mutable a = 0
f2 &a;;
La mia ipotesi è che il ByRef potrebbe essere un riferimento mutabile a una variabile di stack, che potrebbe andare fuori del campo di applicazione se f2 decide di memorizzarlo da qualche parte. O è qualcos'altro?
Che errore ottieni? –
'> let f() = let f2 (a: byref) = () let mutable a = 0 f2 & a ;; () -------- ^^ C: \ Users \ mfaiza \ AppData \ Local \ Temp \ stdin (21,9): errore FS0425: il tipo di una funzione di prima classe non può contenere byrefs' –
Beh, questa è solo una limitazione della lingua. Ha a che fare con l'idea di una funzione come qualcosa che prende un input e produce un output, e un parametro 'byref' non è esattamente un" input ", ma piuttosto sia input + output. Se vuoi che la funzione muti una cella, basta che restituisca il valore modificato. –