繁体   English   中英

F#操作员/功能混淆

[英]F# Operator/Function Confusion

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

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

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

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

正如我所料,我会得到42分。 但是,如果我尝试:

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

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

它正在解释这个:

printf "%d" (+*) 6

像这样:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM