6
我刚刚开始使用F#,当玩弄操作符重载时,我遇到了一些我不太明白的东西。现在,我明白你不能使用例如+*
作为重载前缀运算符;它只能是一个中缀操作符。此处,我感到困惑,但是:F#操作符/函数混淆
let (+*) a = a + a * a;;
如果我运行此,FSI告诉我,功能(+*)
是int->int
。太好了,我可以挖掘它 - 它不是一个重载操作符,只是一个名为(+*)
的正常函数。所以,如果我这样做:
printf "%d" ((+*) 6)
我会得到42,因为我期望。但是,如果我尝试:
printf "%d" (+*) 6
or
printf "%d" (+*)6
它不会编译。我现在无法将确切的错误提出来,因为此时我无法访问F#编译器,但为什么会这样呢?这里的绑定发生了什么?
啊,这是有道理的。但是,参数的间隔语法看起来好像会使绑定混淆。以什么顺序将空间绑定参数?我习惯于带有强制括号参数的类C语言,所以这种绑定对我来说显而易见。 – Perrako 2010-08-03 00:55:23
Perrako,这是一个很好的后续问题。将它作为一个单独的问题发布,以便我们对未来有一个参考(例如,“当我习惯C类参数时,如何习惯F#参数传递语法?”)。 (我很抱歉,我无法回答自己;我在F#之前学习了Lisp,所以我习惯了这种空间语法。) – 2010-08-03 04:07:26
没关系,我发现这个问题可能会回答你的问题:http:// stackoverflow .com/questions/2725202/f-function-calling-syntax-confusion – 2010-08-03 04:18:47