2

我想写以下内容:

module A =
  type Token 
  let foo Token = 

module B =
  type Token 
  let foo Token = 

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

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

4

1 回答 1

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()

于 2012-04-19T23:06:58.270 回答