【发布时间】:2011-09-08 22:56:54
【问题描述】:
我要么没有看到明显的东西,要么只是普遍感到困惑 我的代码如下:
let inline createContext source destination =
let src = (fun amount (s:^T) -> (^T : (member DecreaseBalance : decimal -> ^a) (s, amount)))
let dst = (fun amount (d:^T) -> (^T : (member IncreaseBalance : decimal -> ^a) (d, amount)))
let log = (fun msg a -> (^T : (member LogMessage : string -> ^a) (a, msg)))
let f = fun amount -> src amount source |> ignore
log "" source |> ignore
let f = fun amount -> dst amount destination |> ignore
log "" destination |> ignore
new Context (source, destination, src, dst, log)
let src = new Account(0m)
let dst = new Account(0m)
let ctxt = createContext src dst
Account 类型满足 createContext 的成员约束。 Intellisense 声称 createContext 的签名是 Account -> Account -> Context 但编译器在最后一行的 src 抱怨“这个表达式应该有类型单元,但这里有类型 Account” 知道我缺少什么吗?
如果我重命名 Account 的成员函数,使其不再符合我得到的约束 “'Account' 类型不支持任何名为 'LogMessage' 的运算符”,这是我在那种情况下所期望的。如果我将 () 作为第一个参数传递,我会收到相同的错误消息。该单元不支持 LogMessage(并不是说如果实际编译它会给我带来任何好处)
【问题讨论】:
标签: f#