回复:你最初的问题是:
Array(1, 2, 3).map(if (_ % 2 == 0) _ * 2)
// error: missing parameter type for expanded function ...
// error: type mismatch ...
这个
_
这种模式中使用的占位符表示匿名函数的位置参数,因此
if (_ % 2 == 0) _ * 2
相当于:
if (x => x % 2 == 0) y => y * 2
这就解释了
missing parameter
错误。这个
type mismatch
错误是由于缺少
else
在
if
语句,强制编译器返回
Unit
:
Array(1, 2, 3).map(i => if (i % 2 == 0) i * 2 else i)
// res1: Array[Int] = Array(1, 4, 3
考虑到您需要多次指定单个输入,我不确定它是否适合您。
正如您已经注意到的,这个占位符语法确实有其局限性,对于相对简单的情况,应该将其视为一个方便的缩写。像
if (_ % 2 == 0) 0 else 1)
外壳,嵌套
γ
在一个
map
一般情况下工作不好。例如:
List("a", "b", "c").map(_ * 3)
// res2: List[String] = List(aaa, bbb, ccc)
List("a", "b", "c").map((_ + " ") * 3)
// error: missing parameter type for expanded function ...
有关更多用法,请参阅:
γ
这里是一个
SO link
和A
Scala doc
关于常用符号,包括
γ
.