web-dev-qa-db-ja.com

C#のデフォルトキーワードのF#に相当するものは何ですか?

C#defaultキーワードに相当するものを探しています。例:

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

ありがとう

75
Stringer

私はこれをブログで見つけました: " このC#コードはF#でどのように見えますか?(パート1:式とステートメント) "

C#には、指定された型のゼロ初期化値を返す「default」という演算子があります。

default(int) 

有用性は限られています。最も一般的には、ジェネリックでdefault(T)を使用できます。 F#には、ライブラリ関数と同様の構造があります。

Unchecked.defaultof<int>
81
blu

技術的に言えば、F#関数Unchecked.defaultof<'a>は、C#のdefault演算子と同等です。ただし、defaultofはF#ではnsafeのものと見なされ、本当に必要な場合にのみ使用する必要があることに注意してください(nullを使用する場合と同様)。 、これもF#では推奨されていません)。

ほとんどの場合、option<'a>タイプを使用することで、defaultofの必要性を回避できます。これにより、値がまだ利用できないという事実を表すことができます。

ただし、ここにアイデアを示す簡単な例を示します。次の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だけが実行できます。ただし、F#ではdefaultofの使用頻度が低いことを指摘したいと思います。

33
Tomas Petricek