Я ищу эквивалент C# default
ключевое слово, например:
public T GetNext()
{
T temp = default(T);
...
Спасибо
Я нашел это в блоге: "Как выглядит этот код на C# в F#? (часть первая: выражения и операторы)"
В C# есть оператор под названием "default" который возвращает нулевое инициализационное значение данного типа:
default(int)
Он имеет ограниченное применение; чаще всего вы можете использовать default(T) в generic. В F# есть аналогичная конструкция в виде библиотеки функция:
Unchecked.defaultof
Технически говоря, функция 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 # реже.