3

次のコードがあります

module File1

    let convert<'T> x = x

    type myType () =
        member this.first<'T> y =
            convert<'T> y
        member this.second<'T> ys =
            ys
            |> Seq.map this.first<'T>

最後'Tにエラーが発生しますUnexpected type arguments。たとえば、私が呼び出すとlet x = myType.first<int> "34"、警告はなく、すべてが期待どおりに機能します。型引数を残すと、警告が取り除かれ、プログラムが意図したとおりに動作することがあります。

ここで何が起こっているのか誰か説明できますか?

ありがとう

4

1 に答える 1

4

つまり、型引数を持つメソッドには明示的な引数が必要です。エラーは変更することで修正できます

ys
|> Seq.map this.first<'T>

ys
|> Seq.map (fun y -> this.first<'T> y)

エラーはこの優れた回答で非常に明確に説明されています。ここでは繰り返しません。F# 2.0 と F# 3.0 の間でエラー メッセージが変更されていることに注意してください。

実際に'Tは型シグネチャのどこにも使用しないので'T、問題なく削除できます。

クエリに型が必要な場合は、上記の Tomas の回答の手法を使用することをお勧めします。

type Foo() = 
  member this.Bar (t:Type) (arg0:string) = ()

let f = new Foo() 
"string" |> f.Bar typeof<Int32>
于 2013-06-10T13:38:48.183 に答える