编译:
let inline f< ^T when ^T : (static member (<<<) : ^T * int -> ^T) > (x : ^T) = x <<< 1
不编译:
let inline f< ^T when ^T : (static member (>>>) : ^T * int -> ^T) > (x : ^T) = x >>> 1
错误:
添加空格并没有帮助;此行产生相同的编译器错误:
let inline f< ^T when ^T : (static member ( >>> ) : ^T * int -> ^T) > (x : ^T) = x >>> 1
我已经搜索了文档和规范,但没有用。这是一个错误吗?有没有办法在成员签名中包含>
个字符?
答案 0 :(得分:8)
当然看起来像个臭虫。这很难看,但一种解决方法是使用运算符名称的长形式:
let inline f< ^T when ^T : (static member op_RightShift : ^T * int -> ^T)> (x : ^T) =
x >>> 1
答案 1 :(得分:6)
你甚至需要明确的约束吗?这也适用:
let inline f (x: ^T) : ^T = x >>> 1