1 つのジェネリック パラメーターを持つ基本的な関数があります。
let func<'T> (x:'T when 'T : (static member op_Explicit: 'T -> float) ) =
float x
エラーが発生するのはなぜですか:「宣言された型パラメーター 'T は、コンパイル時に型パラメーターを解決できないため、ここでは使用できません」
この例では、1 つのジェネリック パラメーターを指定し、明示的に float にキャストできるように制約しました。関数はすべて float にキャストするだけですが、何が問題なのでしょうか? F# のジェネリックに関連する MSDN のドキュメントをすべて読みましたが、それらはただ循環しているように見え、Visual Studio で見られる動作に対応していません。私の理解では、一重引用符構文の使用は、'T
コンパイル時のジェネリックではなく、実行時のジェネリック用です。
これは私に別の質問をもたらします。構文'T
とが^T
混在しているのをよく見かけinline
ます。これは、これらの構文定義に関する MSDN ドキュメントに反します。何か不足していますか?
さらに、ドキュメントから、型のop_Explicit
制約は'T
、型注釈なしで自動的に推論できるはずです。
let func x =
float x
しかし、この場合、 の型は でx
あると推測されますint
。