为什么这些看似相似的语句会产生不同类型的对象?

时间:2014-04-08 11:17:39

标签: scala

在书中' 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。有人可以解释一下吗?感谢。

1 个答案:

答案 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,因此您的第一个示例也会返回StringRange.flatMap会返回IndexedSeq