在书中' Scala for the Impatient'作者为“理解”提供了以下两个例子:
for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
// Yields "HIeflmlmop"
for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
// Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p')
但是,他没有提到为什么输出在第一种情况下是String,而在第二种情况下是Vector。有人可以解释一下吗?感谢。
答案 0 :(得分:10)
你的第一个例子被翻译成:
"Hello".flatMap(c => (0 to 1).map(i => (c + i).toChar))
和第二个
(0 to 1).flatMap(i => "Hello".map(c => (c + i).toChar))
StringOps.flatMap
会返回String
,因此您的第一个示例也会返回String
。 Range.flatMap
会返回IndexedSeq
。