function - F# 运算符/函数混淆

标签 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# 编译器,但这是为什么呢?这里的绑定(bind)是怎么回事?

最佳答案

它是这样解释的:

printf "%d" (+*) 6

像这样:
printf ("%d") (+*) (6)

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

关于function - F# 运算符/函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392739/

相关文章:

基于 JavaScript 文本的宠物游戏

f# - 如何检查 F# 预处理器中的操作系统?

asp.net-web-api - 在 C# WebApi/MVC 项目中,用 F# 创建的类序列化不正确

F# 异常处理 : how to parse number in ReadLine()?

c++ - C++ 中的运算符 <<<> 是什么?

bash - Makefile 中的函数

javascript - 为什么这个装饰函数的结果与预期不一致?

c - 功能和程序分离

c++ - 如何重载数组索引运算符的多个下标?

C++:在两个不同的类中重载相同的运算符时出现问题