Parsing Scala如何理解不同格式的函数调用?

Parsing Scala如何理解不同格式的函数调用?,parsing,scala,programming-languages,compilation,Parsing,Scala,Programming Languages,Compilation,我意识到以下函数调用都是相同的,但我不明白为什么 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) res

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

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的成员函数


但我听不懂第二次和第三次通话。例如,在第3次调用中,Scala编译器如何知道“(.length)”是“map”的参数?编译器如何知道“map”是“列表”的成员函数?

< p> 2和3之间的唯一区别是括号前面的空白?这只能是一个分隔符-
列表a
列表a
当然是不同的,但开头的括号是一个新的标记,您可以在前面放一个空白或两个或三个,也可以不放。我不明白你怎么能期望这里有什么不同

在Java中,两者之间没有区别

 System.out.println ("foo"); 
//及

 System.out.println("foo"); 

也是。

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

空格用于区分单词--
listmap(uu.length)
将使编译器查找
listmap
。但是,如果您编写
list++list
,它也会起作用,
list++list


因此,如果您使用运算符表示法,空格是分隔单词所必需的,但除此之外可能存在或不存在。

@Luigipling:哦,是的,谢谢。那是我的一个误导性评论;移除它。