Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 静态类型变量、成员约束、编译器错误?(“试图将其作为操作员名称进行分析,但失败”_F#_Inline_F# 3.0 - Fatal编程技术网

F# 静态类型变量、成员约束、编译器错误?(“试图将其作为操作员名称进行分析,但失败”

F# 静态类型变量、成员约束、编译器错误?(“试图将其作为操作员名称进行分析,但失败”,f#,inline,f#-3.0,F#,Inline,F# 3.0,汇编: let inline f< ^T when ^T : (static member (<<<) : ^T * int -> ^T) > (x : ^T) = x <<< 1 当^T:(静态成员():^T*int->^T)>(x:^T)=x>>1时,让内联f”。应为“)”或其他标记 类型参数缺少约束“^T:(静态成员(>>):^T*int32->^T)”时 添加空格没有帮助;此行产生相同的编译器错误: let inline f<

汇编:

let inline f< ^T when ^T : (static member (<<<) : ^T * int -> ^T) > (x : ^T) = x <<< 1
当^T:(静态成员():^T*int->^T)>(x:^T)=x>>1时,让内联f<^T
错误:

  • 试图将其作为操作员名称进行分析,但失败
  • 成员签名中出现意外符号“>”。应为“)”或其他标记
  • 类型参数缺少约束“^T:(静态成员(>>):^T*int32->^T)”时
  • 添加空格没有帮助;此行产生相同的编译器错误:

    let inline f< ^T when ^T : (static member ( >>> ) : ^T * int -> ^T) > (x : ^T) = x >>> 1
    
    当^T:(静态成员(>>):^T*int->^T)>(x:^T)=x>>>1时,让内联f<^T
    

    我已经搜索了文档和规范,但没有结果。这是虫子吗?是否有办法在成员签名中包含
    字符?

    看起来确实像个bug。这很难看,但一种解决方法是使用运算符名称的长形式:

    let inline f< ^T when ^T : (static member op_RightShift : ^T * int -> ^T)> (x : ^T) =
        x >>> 1
    
    当^T:(静态成员op_RightShift:^T*int->^T)>(x:^T)时,让内联f<^T=
    x>>>1
    
    您甚至需要显式约束吗?这同样有效:

    let inline f (x: ^T) : ^T = x >>> 1
    

    看起来像个虫子…啊,谢谢。我以为我试过了,但没有成功,但显然还有其他错误,因为这很好用。@phoog-你可能用了
    op\u greater
    ,但实际上不能象征性地使用。不,我肯定用了op\u RightShift,编译器似乎无法识别带有该约束的
    >
    。也许我输入了
    op_LeftShift
    而不是
    op_RightShift
    ,或者其他什么地方出错了。是的,谢谢你的回答;我忘了在问题中包括那个。事实上,这是一个更早、更长版本的问题,但我决定在发帖前尽量简短。我确实有理由使用显式约束。我不记得那是什么,确切地说;最后,我决定以完全不同的方式解决我的问题。问题是编写代码,将IEEE single或IEEE double一般分解为符号、指数和尾数部分;现在我只使用一个类型别名,可以根据需要进行更改。稍后我可能会回到通用方法。
    let inline f (x: ^T) : ^T = x >>> 1