【发布时间】:2018-02-20 03:45:42
【问题描述】:
以下 F# 代码
let f<'T when 'T: (member Id:int)> (t:'T) = t.Id
不被接受,并出现以下错误:
错误 FS0670 此代码不够通用。类型变量 ^T 当 ^T : (member get_Id : ^T -> int) 不能被概括 因为它会逃脱它的范围。
怎么了? 如何解决?
编辑
@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 在 中给出错误
错误 FS0010 模式中出现意外的中缀运算符
f2 在 ('T
错误 FS0583 不匹配 '('
错误 FS0010 绑定中出现意外的引号
f3 和 f4 被接受
【问题讨论】:
-
你想要SRTP