我喜欢Scala的是,我经常通过尝试对我来说很直观的东西来发现新的语法。例如,我不得不解码一个文本,其中每个字符被一个不同的符号替换,所以我在这个简化的例子中做了:
val map = Map[Char,Char]('h' -> 'd', 'e' -> 'l', 'l' -> 'o', 'w' -> 'r', 'o' -> 'h', 'r' -> 'd', 'd' -> 'e')
println("hello world".split("\\s+").map(word => word.map(map).mkString).mkString(" "))
它完美无缺。我查看了Array.map
的文档以了解它是如何完成的(我正在考虑看到一些隐式转换或类似的东西),但我一无所获。有人可以解释一下如何将Map
作为参数而不是函数传递?
答案 0 :(得分:4)
在scala中,Map实际上扩展了Function1(通过其MapLike父级)。 Map [A,B]实际上是一个Function1 [A,B],同样,List [A]是一个Function1 [Int,A],而Set [A]是一个Function1 [A,Boolean],其中这些可以表现作为功能。
scala> val m : Int => String = Map(1 -> "a", 2 -> "b")
m: Int => String = Map(1 -> a, 2 -> b)
scala> m(1)
res0: String = a
答案 1 :(得分:3)
好吧,如果您查看Docs,可以看到Map
实际扩展Function1
,并且直观地定义了apply
方法以返回映射的值钥匙。因此foo.map(map)
相当于foo.map(bar => map(bar))