我正在学习Scala并正在尝试使用命令行.我无法理解为什么第二行无法编译.有人可以解释一下.
val list = List(1,2,3,4)
list.map(_+1) //This works. List(2,3,4,5)
list.map(List(_+1)) //But, Compilation Fails here
list.map(x=>List(x+1)) //This works. List(List(2),List(3),List(4),List(5))
Run Code Online (Sandbox Code Playgroud)
谢谢.
Scala将扩展_(当在占位符位置使用时)x => x,除非此类扩展将导致身份函数(在此答案的末尾更多):
list.map(_+1) // same as list.map(x => x + 1) (1)
list.map(List(_+1)) // same as list.map(List(x => x+1)) (2)
Run Code Online (Sandbox Code Playgroud)
在这种情况下(1),scala可以推断出x有类型Int(自list: List[Int]).
然而(2)失败了
error: missing parameter type for expanded function ((x$1) => x$1.$plus(1))
Run Code Online (Sandbox Code Playgroud)
因为scala无法推断出x类型List(x => x+1).
关于扩展和身份功能:
scala> list.map(List(_))
res3: List[List[Int]] = List(List(1), List(2), List(3), List(4))
Run Code Online (Sandbox Code Playgroud)
工作原理,因为list.map(List(x => x))扩展被拒绝,而下一个可能是list.map(x => List(x)),这给res3.