С# имеет оператор, называемый "default" который возвращает нулевую инициализацию значение данного типа:
default(int)
Он имеет ограниченную полезность; чаще всего вы можете использовать default (T) в общем. F # имеет аналогичная конструкция как библиотека Функция:
Unchecked.defaultof<int>
Ответ 2
Технически говоря, функция F # Unchecked.defaultof<'a> эквивалентна оператору default в С#. Тем не менее, я думаю, стоит отметить, что defaultof рассматривается как небезопасная вещь в F # и должен использоваться только тогда, когда это действительно необходимо (так же, как использование null, которое также не рекомендуется в F #).
В большинстве случаев вы можете избежать необходимости defaultof с помощью типа option<'a>. Это позволяет вам представить, что значение еще не доступно.
Однако, вот краткий пример, демонстрирующий идею. Следующий код С#:
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 #.