Qual è l'equivalente in F # di default parola chiave C #?
Domanda
Sto cercando l'equivalente di C # default
parola chiave, per esempio:
public T GetNext()
{
T temp = default(T);
...
Grazie
Soluzione
Ho trovato questo in un blog: " Che cosa significa questo codice C # sguardo come in F # (prima parte: le espressioni e le dichiarazioni)? "
C # ha un operatore chiamato "default" che restituisce l'inizializzazione di zero valore di un determinato tipo:
default(int)
Si è limitata utilità; più comunemente si può usare default (T) in un generico. F # ha una costrutto simile come libreria Funzione:
Unchecked.defaultof<int>
Altri suggerimenti
Tecnicamente parlando F # funzione Unchecked.defaultof<'a>
è un equivalente all'operatore default
in C #. Tuttavia, penso che la pena notare che defaultof
è considerato come una cosa non sicuri in F # e deve essere utilizzato solo quando è veramente necessario (proprio come con null
, che è anche scoraggiato in F #).
Nella maggior parte della situazione, si può evitare la necessità di defaultof
utilizzando il tipo di option<'a>
. Esso consente di rappresentare il fatto che un valore non è ancora disponibile.
Tuttavia, qui è un breve esempio per dimostrare l'idea. Il seguente codice C #:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Sarebbero scritto probabilmente come questo in F # (utilizzando le funzioni imperativi):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Naturalmente questo dipende dal vostro scenario specifico e in alcuni casi defaultof
è l'unica cosa che si può fare. Comunque, volevo solo far notare che defaultof
è usato meno frequentemente in F #.