我试图强制对函数施加约束,使得第一个参数的类型具有返回Async<'T>
的成员,如下所示:
let inline private f (a : ^T) = (^T : (static member g : string -> ^T Async) T)
但是,我收到的编译错误是T未定义。是否可以以这种方式定义约束?
答案 0 :(得分:1)
您正在使用&#34;成员约束调用表达式&#34;并且该成员需要一个字符串作为输入,但您只有一个未绑定的标识符。如果你真的想要调用该方法,那么只需用一个字符串代替标识符T
。
如果您只想约束类型参数但实际上不调用成员,您可以这样做:
let inline private f (a : ^T when ^T : (static member g : string -> ^T Async) = ...
但是你需要用一些东西填充身体。