Qual é o equivalente em F# da palavra -chave padrão C#?
Pergunta
Estou procurando o equivalente a C# default
palavra -chave, por exemplo:
public T GetNext()
{
T temp = default(T);
...
Obrigado
Solução
Eu encontrei isso em um blog: "Como é esse código C# em f#? (Parte um: Expressões e declarações)"
C# possui um operador chamado "padrão" que retorna o valor zero de inicialização de um determinado tipo:
default(int)
Tem utilidade limitada; Geralmente, você pode usar o padrão (t) em um genérico. F# tem uma construção semelhante como uma função da biblioteca:
Unchecked.defaultof<int>
Outras dicas
Tecnicamente falando F# função Unchecked.defaultof<'a>
é um equivalente ao default
Operador em C#. No entanto, acho que vale a pena notar que defaultof
é considerado como um inseguro coisa em f# e deve ser usada apenas quando é realmente necessária (assim como usar null
, que também é desencorajado em F#).
Na maior parte da situação, você pode evitar a necessidade de defaultof
usando o option<'a>
modelo. Ele permite que você represente o fato de que um valor ainda não está disponível.
No entanto, aqui está um breve exemplo para demonstrar a ideia. O seguinte código C#:
T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;
Provavelmente seria escrito assim em F# (usando recursos imperativos):
let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with
| None -> bar(arg)
| Some(temp) -> temp
Claro que isso depende do seu cenário específico e, em alguns casos, defaultof
é a única coisa que você pode fazer. No entanto, eu só queria ressaltar que defaultof
é usado com menos frequência em f#.