¿Cuál es el equivalente en F # C # de la palabra clave por defecto?
Pregunta
Estoy buscando el equivalente de C # default
palabra clave, por ejemplo:
public T GetNext()
{
T temp = default(T);
...
Gracias
Solución
He encontrado esto en un blog: " Lo que hace este código C # mirada Al igual que en F # (primera parte: expresiones y declaraciones)? "
C # tiene un operador llamado "default" que devuelve el-inicialización cero valor de un tipo dado:
default(int)
tiene una utilidad limitada; más comúnmente puede usar predeterminado (T) en un genérico. F # tiene una construcción similar como una biblioteca Función:
Unchecked.defaultof<int>
Otros consejos
Técnicamente hablando F # función Unchecked.defaultof<'a>
es un equivalente al operador default
en C #. Sin embargo, creo que vale la pena señalar que defaultof
es considerado como un insegura cosa en F # y debe usarse sólo cuando es realmente necesario (al igual que el uso de null
, que también se desaconseja en Fa #).
En la mayor parte de la situación, se puede evitar la necesidad de defaultof
utilizando el tipo option<'a>
. Se le permite representar el hecho de que un valor aún no está disponible.
Sin embargo, aquí es un breve ejemplo para demostrar la idea. El siguiente código C #:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Probablemente sea escrita como este en F # (usando características imperativas):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Por supuesto, esto depende de su situación específica y en algunos casos defaultof
es la única cosa que puede hacer. Sin embargo, sólo quería señalar que defaultof
se usa con menos frecuencia en F #.