【发布时间】:2016-06-23 15:04:20
【问题描述】:
我写了下面这个简单的例子来理解 map 方法的工作原理:
object Main{
def main (args : Array[String]) = {
val test = "abc"
val t = Vector(97, 98, 99)
println(test.map(c => (c + 1))) //1 Vector(98, 99, 100)
println(test.map(c => (c + 1).toChar)) //2 bcd
println(t.map(i => (i + 1))) //3 Vector(98, 99, 100)
println(t.map(i => (i + 1).toChar)) //4 Vector(b, c, d)
};
}
我不太明白为什么 bcd 会打印在//2。由于每个字符串都被 Scala 视为Seq,我认为test.map(c => (c + 1).toChar) 应该产生另一个Seq。正如//1 建议Vector(b, c, d)。但正如你所看到的,它没有。为什么?它实际上是如何工作的?
【问题讨论】:
-
虽然它是用 Haskell 编写的,但它是我在 Scala 中学习 FP 的方式 - learnyouahaskell.com/…。我建议购买和阅读manning.com/books/functional-programming-in-scala。或者,我建议learnyouahaskell.com,它是在线免费的。
-
@KevinMeredith 您是否认真假设需要学习 Haskell 才能了解 Scala 字符串的工作原理?
-
出于这个原因,我将其作为评论而不是答案发布。要了解
map,我的观点和经验是,首先了解函数式编程的基础知识是值得的——因为map是FP 的基础。 -
@KevinMeredith ...特别是解释 Scala 的
CanBuildFrom,它在 Haskell 中根本不存在? -
@VictorMoroz - 我发现Programming in Scala, 3rd edition 的第 25 章(Scala 集合的架构)对
CanBuildFrom给出了很好的解释。还有 - 好点,维克多,关于CanBuildFrom的问题。我应该阅读这个问题,而不是假设它是关于理解 FP 中的map。
标签: string scala dictionary