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

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

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

Спасибо

70
задан Stringer 25 June 2010 в 22:17
поделиться

2 ответа

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

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

default(int) 

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

Unchecked.defaultof
82
ответ дан 24 November 2019 в 13:28
поделиться

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

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

Тем не менее, вот краткий пример, демонстрирующий идею. Следующий код 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 # реже.

33
ответ дан 24 November 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: