Quel est l'équivalent en F # du mot-clé par défaut C #?
Question
Je cherche l'équivalent de mot-clé C # default
, par exemple:
public T GetNext()
{
T temp = default(T);
...
Merci
La solution
J'ai trouvé dans un blog: « Que ce C # look Code comme dans F # (première partie: expressions et déclarations)? "
C # a un opérateur appelé « par défaut » qui renvoie le zéro d'initialisation La valeur d'un type donné:
default(int)
Il a une utilité limitée; le plus souvent, vous pouvez utiliser par défaut (T) dans un générique. F # a construction similaire à une bibliothèque fonction:
Unchecked.defaultof<int>
Autres conseils
Techniquement parlant F # Unchecked.defaultof<'a>
fonction est un équivalent à l'opérateur de default
en C #. Cependant, je pense qu'il est intéressant de noter que defaultof
est considéré comme un élément dangereux chose en F # et doit être utilisé que lorsqu'il est vraiment nécessaire (tout comme l'utilisation null
, qui est également déconseillée dans F #).
Dans la plupart des cas, vous pouvez éviter la nécessité d'defaultof
en utilisant le type de option<'a>
. Il vous permet de représenter le fait qu'une valeur est pas encore disponible.
Cependant, voici un bref exemple pour démontrer l'idée. Le code C #:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
serait probablement écrit comme ça dans F # (en utilisant les caractéristiques impératives):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Bien sûr, cela dépend de votre scénario spécifique et defaultof
dans certains cas, est la seule chose que vous pouvez faire. Cependant, je voulais juste souligner que defaultof
est moins fréquemment utilisé dans F #.