F#操作员/功能混淆

时间:2010-08-03 00:14:08

标签: function f# operator-overloading

我刚开始使用F#,当玩弄运算符重载时,我遇到了一些我不太了解的东西。现在,我知道您不能使用+*作为重载前缀运算符;它只能是一个中缀运算符。然而,这是我感到困惑的地方:

let (+*) a = a + a * a;;

如果我运行这个,fsi告诉我函数(+*)int->int。好的,我可以挖掘它 - 它不是一个重载的运算符,只是一个名为(+*)的普通函数。所以,如果我这样做:

printf "%d" ((+*) 6)

我会得到42,正如我所期望的那样。但是,如果我尝试:

printf "%d" (+*) 6
or
printf "%d" (+*)6

它不会编译。我现在无法提出确切的错误,因为此时我无法访问F#编译器,但为什么会这样?绑定在这里发生了什么?

1 个答案:

答案 0 :(得分:7)

它正在解释这个:

printf "%d" (+*) 6

像这样:

printf ("%d") (+*) (6)

换句话说,将三个curried参数传递给printf,其中第二个是对函数+*的引用。