Что эквивалентно в F # ключевому слову C # по умолчанию?

StackOverflow https://stackoverflow.com/questions/2246206

Вопрос

Я ищу эквивалент C# default ключевое слово, например:

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

Спасибо

Это было полезно?

Решение

Я нашел это в блоге:"Как выглядит этот код C # в F #?(часть первая:выражения и утверждения)"

В C # есть оператор под названием "default" который возвращает нулевую инициализацию значение заданного типа:

default(int) 

Он имеет ограниченную полезность;чаще всего вы можете использовать значение по умолчанию (T) в общем виде.F # имеет конструкцию, аналогичную библиотечной функция:

Unchecked.defaultof<int>

Другие советы

Технически говоря, функция F # Unchecked.defaultof<'a> является эквивалентом default оператор в C #.Однако, я думаю, стоит отметить, что defaultof рассматривается как небезопасно вещь в F # и должна использоваться только тогда, когда это действительно необходимо (точно так же, как использование null, что также не рекомендуется в F #).

В большинстве случаев вы можете избежать необходимости в defaultof используя option<'a> Тип.Это позволяет вам представить тот факт, что значение еще недоступно.

Однако вот краткий пример, демонстрирующий эту идею.Следующий код на C #:

T temp = default(T);
// Code that may call: temp = foo()
if (temp == default(T)) temp = bar(arg)
return temp;

Вероятно, было бы написано примерно так в F # (с использованием императивных функций):

let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with 
| None -> bar(arg)
| Some(temp) -> temp

Конечно, это зависит от вашего конкретного сценария и в некоторых случаях defaultof это единственное, что ты можешь сделать.Однако я просто хотел отметить, что defaultof используется реже в F #.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top