将地图对象作为可迭代的map方法的参数传递

时间:2015-01-05 01:17:54

标签: scala dictionary implicit-conversion

我喜欢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作为参数而不是函数传递?

2 个答案:

答案 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))