0

我意识到以下函数调用都是相同的,但我不明白为什么。

val list = List(List(1), List(2, 3), List(4, 5, 6))

list.map(_.length)   // res0 = List(1,2,3) result of 1st call

list map(_.length)   // res1 = List(1,2,3) result of 2nd call

list map (_.length)  // res2 = List(1,2,3) result of 3rd call

我可以理解第一次调用,这只是一个常规函数调用,因为 map 是类 List 的成员函数

但我无法理解第二次和第三次通话。例如,在第三次调用中,Scala 编译器如何知道“(_.length)”是“map”的参数?编译器如何知道“map”是“list”的成员函数?

4

2 回答 2

2

变体 2 和 3 之间的唯一区别是括号前面的空格?这只能是一个分隔符 -list a当然lista是不同的,但是一个左括号是一个新的标记,你可以在前面放一个空格或两个或三个 - 或者没有。我不明白你怎么能在这里期待不同。

在Java中,没有区别

 System.out.println ("foo"); 

// 和

 System.out.println("foo"); 

也。

于 2012-05-06T23:04:14.433 回答
0

这是运算符符号。它起作用的原因与起作用的原因相同2 + 2

空格是用来区分单词listmap(_.length)的——会让编译器查找listmap。但是,如果您编写list++list,它也会起作用,就像list ++ list.

因此,您正在使用运算符表示法,空格是分隔单词所必需的,否则可能存在或不存在。

于 2012-05-08T20:35:07.827 回答