2
函子我想寫:替代在F#
module A =
type Token
let foo Token =
module B =
type Token
let foo Token =
let run (m : module) =
m.B
|> m.foo
基本功能是這樣的模塊中通用。有沒有辦法在F#中做到這一點?
函子我想寫:替代在F#
module A =
type Token
let foo Token =
module B =
type Token
let foo Token =
let run (m : module) =
m.B
|> m.foo
基本功能是這樣的模塊中通用。有沒有辦法在F#中做到這一點?
正如kvb在評論中指出的那樣,如果沒有現實的例子,很難給出答案,因爲最好的方法將取決於你實際要做的事情。
在這個微不足道的例子中,我可能會使用F#界面來表示Token
並將Foo
添加爲成員。假設Foo
返回int
,可以編寫的定義是這樣的:
type Token =
abstract Foo : unit -> int
然後就可以實現不同的令牌或者使用類(這是相當重量級)或使用對象表達式。例如:tok.Foo()
所以我會理解這個權利:
對應於您
run
功能只是一個Foo
成員的調用的代碼?你基本上想要在模塊上重載一個重載的函數? – 2012-04-19 13:26:07是的,你可以在ML中使用函數來做到這一點,但是我想知道是否有其他方法可以烘焙到F#中,因爲他們決定不支持函子 – jz87 2012-04-19 14:05:43
我認爲實現接口的類型是最接近的。 – Daniel 2012-04-19 14:12:53