首先,对于这个问题的提问可能有些愚蠢,我正在虔诚地阅读《Scala for the Impatient》并尝试解决所有的练习题(并进行一些最低限度的探索)
背景: 练习题是这样的-设置一个价格映射表,包括你渴望得到的一些小玩意儿。然后创建第二个映射表,其中包含相同的键和以 10% 折扣的价格。
不幸的是,到目前为止,大多数 scaladoc 都对我来说仍然很难懂,但我了解到 Map 的 map 函数接收一个函数并在应用函数后返回另一个映射表(我猜?)- def map[B](f: (A) ⇒ B): HashMap[B]
。我尝试过搜索 "scala 中的 map 函数",但没找到有用的结果 :-)
我的问题:
像我在 variation 3 中所尝试的那样,使用 map
函数是否有任何意义,或者应该坚持 variation 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
mapValues
创建了现有映射上的视图,而map
则创建了一个全新的映射。 - Daenythcase
关键字? - Lucas Lima