以下 F# 代码
let f<'T when 'T: (member Id:int)> (t:'T) = t.Id
不接受以下错误:
错误 FS0670 此代码不够通用。^T : (member get_Id : ^T -> int) 时的类型变量 ^T 无法泛化,因为它会超出其范围。
怎么了?如何解决?
编辑
@Fyodor:棘手!我做了一些测试,发现了更多的奇怪:
let inline f1<^T when ^T: (member Id:int)> (t:^T) = ( ^T: (member Id:int) t )
let inline f2<'T when 'T: (member Id:int)> (t:'T) = ( 'T: (member Id:int) t )
let inline f3<'T when 'T: (member Id:int)> (t:'T) = ( ^T: (member Id:int) t )
let inline f4 t = ( ^T: (member Id:int) t )
f1 在 <^T 中给出错误
错误 FS0010 模式中出现意外的中缀运算符
f2 在 ('T
错误 FS0583 不匹配 '('
错误 FS0010 绑定中出现意外的引号符号
接受 f3 和 f4