为什么我不能绑定(**)运算符

Grz*_*cki 7 f#

在f#中我可以很容易地绑定(+)或(*)运算符.为什么我不能用(**)做同样的事情?

> let s = (+);;
val s : (int -> int -> int)

> let f = (**);;
  let f = (**);;
  ------------^^
C:\Users\mqrx84\AppData\Local\Temp\stdin(4,13): error FS0010: Incomplete structured construct at or before this point in binding
Run Code Online (Sandbox Code Playgroud)

Mat*_*igh 15

因为(* *)用于多行注释.你需要用空格分隔括号和运算符,例如let f = ( ** );;

要定义以*开头的其他运算符,空格必须遵循左括号; 否则(*被解释为评论的开头:let(*+*)xy =(x + y)

来自规范 - http://fsharp.org/specs/language-spec/

  • @GrzegorzSławecki编译器似乎将其作为一个特殊情况来处理它自己的标记`LPAREN_STAR_RPAREN` (4认同)
  • 顺便说一句,这很奇怪,这就是`让f =(*)` (2认同)