3

F# メソッドにダック タイピングを追加する方法を検討しています。

SomeMethod(model:'a) =
   let someField = model.Test("")

入ってくるパラメーターに Test メソッドがある場所。私はこのような表記を見てきました:

member inline public x.Testing< ^a when ^a : (member public Test : String-> String)>(model:^a) =   
  let something = model.Test("")
  ignore

クラス/インターフェースレベルではなく、メソッドレベルでジェネリック制約を使用できるように思えます。問題は、型の問題によりコンパイルできないことです。これは、メソッド レベルで制約を指定する方法がないと私に信じさせます。それは正確ですか?

4

1 に答える 1

5

これの構文は少し不格好ですが、ここにあります。

type Foo() =
  member inline public x.Testing(model) =   
    let something = (^a : (member Test : string -> string) (model, ""))
    ignore

おそらくインターフェースを使用する方が良いでしょう:

type IModel
  abstract Test : string -> string
于 2011-11-11T15:16:58.787 に答える