讓我們對這個問題的緣故創造價值:斯卡拉強調最小功能
val a = 1 :: Nil
現在,我可以證明,匿名函數可以簡寫形式寫成這樣:
a.map(_*2)
是否可以編寫此功能的簡寫?:
a.map((x) => x)
我的解決方案不起作用:
a.map(_)
讓我們對這個問題的緣故創造價值:斯卡拉強調最小功能
val a = 1 :: Nil
現在,我可以證明,匿名函數可以簡寫形式寫成這樣:
a.map(_*2)
是否可以編寫此功能的簡寫?:
a.map((x) => x)
我的解決方案不起作用:
a.map(_)
你的第一個簡寫形式,也可以寫自由點
a map (2*)
由於乘法是可交換的。
至於(x) => x
,你想要identity
函數。這在Predef中定義並且是通用的,所以您可以確定它是類型安全的。
我認爲你的意思是交換。 – Debilski 2010-12-12 14:19:00
可惜'x => x'是四個字符,而'identity'是八個字符。這就是爲什麼我從不使用「身份」。 – 2010-12-12 14:50:05
@debilski這東西不容易,你知道!不是當18個月的戰鬥時間來訪問鍵盤! – 2010-12-12 18:45:58
您應該對此用例使用identity
函數。
a.map(identity)
identity
在scala.Predef定義爲:
implicit def identity[A](x: A): A = x
根據記錄,a.map(_)
不起作用,因爲它代表x => a.map(x)
,而不是a.map(x => x)
。發生這種情況是因爲單個_
代替參數代表部分應用的函數。在2*_
的情況下,這代表匿名函數。這兩種用法非常接近,很容易讓他們感到困惑。
沒有多大意義,是嗎?這只是一個NOP。 – delnan 2010-12-12 14:11:50
這只是一個例子。它可以在上下文中產生一些意義 – coubeatczech 2010-12-12 14:21:19
這是一個很好的例子,說明Scala中'_'糖的過度使用(imho)真的使得人們難以接受語言。 – akauppi 2013-03-03 21:29:25