F#中算符的替代品

时间:2012-04-19 13:14:48

标签: f# functor

我想写下以下内容:

module A =
  type Token 
  let foo Token = 

module B =
  type Token 
  let foo Token = 

let run (m : module) =
  m.B
  |> m.foo

基本上是模块中通用的函数。有没有办法在F#中做到这一点?

1 个答案:

答案 0 :(得分:3)

正如kvb在评论中指出的那样,没有一个现实的例子很难给出答案,因为最好的方法将取决于你实际上要做的事情。

在这个简单的例子中,我可能会使用F#接口来表示Token并添加Foo作为成员。假设Foo返回int,您可以编写如下定义:

type Token = 
  abstract Foo : unit -> int

然后,您可以使用类(非常重量级)或使用对象表达式来实现不同的标记。例如:

let tok = { new Token with
              member x.Foo () = 42 }

run功能相对应的代码只是Foo成员的调用:tok.Foo()