用来从Scala中的对象调用函数之间的区别.和确切的区别是什么?
由于某种原因,我会得到一些变化,例如:
scala> val l:List[Int] = 1::Nil
l: List[Int] = List(1, 2, 3)
scala> l foldLeft(0)((hd, nxt) => hd + nxt)
<console>:13: error: Int(1) does not take parameters
| foldLeft(1)((hd, nxt) => hd + nxt)
^
scala>l.foldLeft(0)((hd, nxt) => hd + nxt)
res2: Int = 2
Run Code Online (Sandbox Code Playgroud)
(而且,当我在操作时,该操作的名称是什么?我一直试图找到.操作符的严格定义,但我不知道它的名字。)
如果对象的被调用函数中没有参数,则用空格代替点称为“ 后缀表示法”,如果函数需要有参数则称为中缀表示法。
Postix示例:l sum,相当于l.sum
中缀示例:l map (_ * 2),相当于l.map(_ * 2)
这些符号的问题在于,它们本质上在解释上更加模棱两可。数学上的经典示例:
因此,它不是一个不同的运算符,而是与点相同,只是容易产生歧义,这可能会导致语法错误(例如您的情况),或者在链接中缀运算符时导致更严重的逻辑错误。
实际上,您可以通过以下方式用前缀符号表示foldLeft:
(l foldLeft 0)((hd, nxt) => hd + nxt)
Run Code Online (Sandbox Code Playgroud)
甚至
(0 /: l)((hd, nxt) => hd + nxt)
Run Code Online (Sandbox Code Playgroud)
where /:只是foldLeft的别名,并使用以Colon(:)结尾的运算符的唯一语义,这些语义被解释为l./:(0)(与通常情况相反)。
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |