Scala:元组内的元组

Fra*_*oth 2 scala

我玩了一些占位符,发现了一个奇怪的案例:

val integers = Seq(1, 2)
val f = (x:Int) => x + 1
integers.map((_, f(_)))
Run Code Online (Sandbox Code Playgroud)

返回

Seq[(Int, Int => Int)] = List((1,<function1>), (2,<function1>))
Run Code Online (Sandbox Code Playgroud)

我在期待

Seq[(Int, Int)] = List((1, 2), (2, 3))
Run Code Online (Sandbox Code Playgroud)

如果我进行以下更改,一切都按预期工作:

integers.map(i => (i, f(i)))
Run Code Online (Sandbox Code Playgroud)

知道为什么f在映射期间不应用该函数吗?

jwv*_*wvh 5

下划线仅代表传递的参数一次.因此,integers.map((_, f(_)))第1个_是来自的值,integers但是第2个_具有"部分应用函数"的独立含义.

如果您的匿名函数需要2个(或更多)参数,那么您可以使用2个(或更多)下划线,但每个参数仅代表其传递的参数一次.