首先,为这个蹩脚的问题道歉。我正在认真阅读“为不耐烦的人准备的 Scala”,并尝试解决所有练习题(并进行一些最小的探索)
背景: 练习题是这样的 - 为您梦寐以求的一些小玩意设置价格地图。然后生成具有相同键和 10% 折扣价格的第二张地图。
不幸的是,在这一点上,scaladoc 的大部分部分对我来说仍然很神秘,但我知道 map 的函数Map
接受一个函数并在应用一个函数后返回另一个 map(我猜?) - def map[B](f: (A) ⇒ B): HashMap[B]
。我尝试使用谷歌搜索,但无法获得很多有用的结果map function for Map in scala
:-)
我的问题:
正如我在变体 3 中所尝试的那样map
,为此目的使用函数是否有意义,或者我应该坚持使用实际上解决了我的问题的变体 2。
代码 :
val gizmos:Map[String,Double]=Map("Samsung Galaxy S4 Zoom"-> 1000, "Mac Pro"-> 6000.10, "Google Glass"->2000)
//1. Normal for/yield
val discountedGizmos=(for ((k,v)<-gizmos) yield (k, v*0.9)) //Works fine
//2. Variation using mapValues
val discGizmos1=gizmos.mapValues(_*0.9) //Works fine
//3. Variation using only map function
val discGizmos2=gizmos.map((_,v) =>v*0.9) //ERROR : Wrong number of parameters: expected 1