如果理解了运算符的优先顺序与结合性,那么管道运算符的执行机制也变得容易理解了,本节对此进行介绍。
在F#中,运算符存在优先顺序与结合性,这两者是运用运算符进行表达式的计算时,是按什么顺序依次执行表达式各部分的计算的决定因素。
基本上是先执行优先级高的运算部分,优先级相等时按结合性决定运算顺序。结合性分为两种,从右往左进行的计算称为右结合,从左往右的计算称为左结合。大部分的运算符(特别是函数运用)都是左结合,同时,表达式被()括起来的时候,先执行()中的运算。
首先,举个优先顺序不同的例子。因为加法运算的优先级比乘法运算的优先级低,所以以下表达式的运行结果相同。
结合的强度
1 2 * 3 4 * 5 6;; |
同时,结合的强度相等时由结合性决定运算顺序。在下例中,可以确认**(冪)是右结合的。
结合性
> 2.0 ** 3.0 ** 2.0;; |
要理解函数调用的顺序,必须要记住“F#的函数全部为单参数函数”。
函数调用
let h x = x * 2;; |
全部函数为单参数时,连续调用函数时就有点不方便。
譬如下面这个例子。
想要进行函数合成
> let f x = x 1;; |
这种情况下,可以使用管道运算符。
使用管道运算符的例子
另外,在允许不带参数的语言中(基本上所有的语言都是这样的),有可以书写象f g 3这种写法的语言。例如perl中
与其他语言的比较
虽然这样写比较清晰,因而受人欢迎,但是使用柯里化处理起来也很方便。 |