如何强制约束成员的返回类型

时间:2015-04-22 18:24:44

标签: f#

我试图强制对函数施加约束,使得第一个参数的类型具有返回Async<'T>的成员,如下所示:

let inline private f (a : ^T) = (^T : (static member g : string -> ^T Async) T)

但是,我收到的编译错误是T未定义。是否可以以这种方式定义约束?

1 个答案:

答案 0 :(得分:1)

您正在使用&#34;成员约束调用表达式&#34;并且该成员需要一个字符串作为输入,但您只有一个未绑定的标识符。如果你真的想要调用该方法,那么只需用一个字符串代替标识符T

如果您只想约束类型参数但实际上不调用成员,您可以这样做:

let inline private f (a : ^T when ^T : (static member g : string -> ^T Async) = ...

但是你需要用一些东西填充身体。