2015-11-25 28 views
0

例如,你为什么不能做?:以下为什么不能使用占位符语法将地图占位符与自身相乘?

List(1, 2, 3).map(_ * _) 

然而,它有可能做到:

List(1, 2, 3).map(x => x * x) 

在这种情况下,结果是一个1 9名单,4, 。我知道还有其他解决这个问题的方法,但我主要只是想明白为什么这不起作用。

+0

注意解释downvote? – Seer

+0

对我来说这似乎是一个合理的问题,我给了你一个赞成票,因为我认为其他人会觉得它有用。 – Oli

回答

2

每个下划线指的是一个新的参数,按顺序。
因此_ * _(x, y) => x * y的简写 - 不是(x, y) => y * xx => x * x

map采用将单个值映射到新值的函数。因此_ * _与它不兼容。

+0

对,这样做更有意义。如果您要连续两次执行“print _”这样的操作,这仍然适用吗? – Seer

+0

@ Seer你能详细说明你的后续问题吗?我不明白你在问什么。 –

+0

当然可以。我明白这又是一个完全没有意义的例子,如果你这样做:'List(1,2,3).map({print _; print _; _ * 2})',为什么第二个或第三个' _'不是第二个或第三个参数? – Seer

1

因为map操作只需要一个参数 - 您映射一个元素。你需要创建一个运算符,它自己乘以变量