我刚刚开始使用 F#,在玩操作符重载时,我遇到了一些我不太明白的事情。现在,我知道您不能使用,例如 +*
作为重载的前缀运算符;它只能是中缀运算符。然而,这就是我感到困惑的地方:
let (+*) a = a + a * a;;
如果我运行它,fsi 会告诉我函数
(+*)
是 int->int
.太好了,我可以理解——它不是一个重载的运算符,只是一个名为 (+*)
的普通函数.所以,如果我这样做:printf "%d" ((+*) 6)
正如我所料,我会得到 42 岁。但是,如果我尝试:
printf "%d" (+*) 6
or
printf "%d" (+*)6
它不会编译。我现在无法提出确切的错误,因为我目前无法访问 F# 编译器,但这是为什么呢?这里的绑定(bind)是怎么回事?
最佳答案
它是这样解释的:
printf "%d" (+*) 6
像这样:
printf ("%d") (+*) (6)
换句话说,将三个 curry 参数传递给
printf
, 其中第二个是对函数 +*
的引用.
关于function - F# 运算符/函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392739/