2015-11-25 52 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操作只需要一個參數 - 您映射一個元素。你需要創建一個運算符,它自己乘以變量