我对"不耐烦的Scala"一书中的这些内容有疑问,我证实了这一点:
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')
第一个产生a String
,第二个产生a Vector
?但我希望它们能够返回相同的值.
一般来说,理解中的第一个集合决定了它的返回类型yield
.
因为:
在scala中,理解是语法糖Collection
.map
,.flatMap
等等.所以你开始的系列就是你最终得到的系列.
与等效map
,并flatMap
为您的代码如下:
"Hello".flatMap(c => (0 to 1).map(i => (c + i).toChar))
要么
(0 to 1).flatMap(i => "Hello".map(c => (c + i).toChar))