3

我一直在寻找一种将一些鸭子类型添加到 F# 方法的方法。

SomeMethod(model:'a) =
   let someField = model.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 回答