当我切换for循环发电机命令时,返回类型不同

all*_*win 1 scala

我对"不耐烦的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')
Run Code Online (Sandbox Code Playgroud)

第一个产生a String,第二个产生a Vector?但我希望它们能够返回相同的值.

Sas*_*erg 5

一般来说,理解中的第一个集合决定了它的返回类型yield.

因为:

在scala中,理解是语法糖Collection .map,.flatMap等等.所以你开始的系列就是你最终得到的系列.

与等效map,并flatMap为您的代码如下:

"Hello".flatMap(c => (0 to 1).map(i => (c + i).toChar))
Run Code Online (Sandbox Code Playgroud)

要么

(0 to 1).flatMap(i => "Hello".map(c => (c + i).toChar))
Run Code Online (Sandbox Code Playgroud)