Что эквивалентно в F # ключевому слову C # по умолчанию?
Вопрос
Я ищу эквивалент 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 #.