Pergunta

Estou procurando o equivalente a C# default palavra -chave, por exemplo:

public T GetNext()
{
    T temp = default(T);
            ...

Obrigado

Foi útil?

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#.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top