Что является эквивалентом в F # ключевого слова по умолчанию в C #? - PullRequest
67 голосов
/ 11 февраля 2010

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

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

Спасибо

Ответы [ 2 ]

33 голосов
/ 11 февраля 2010

Технически говоря, функция 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 #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...