【问题标题】:F#: Member constraints to help create seemingly dynamic typesF#:帮助创建看似动态的类型的成员约束
【发布时间】:2011-11-11 14:41:16
【问题描述】:

我一直在寻找一种将鸭子类型添加到 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

在我看来,通用约束可用于在方法级别而不是类/接口级别执行。问题是由于类型问题我无法编译它。这让我相信没有办法在方法级别指定约束。那是正确的吗?

【问题讨论】:

    标签: generics f# generic-constraints


    【解决方案1】:

    这个的语法有点笨拙,但就是这样。

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

    您可能最好使用接口:

    type IModel
      abstract Test : string -> string
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-18
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多