我对"不耐烦的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?但我希望它们能够返回相同的值.
一般来说,理解中的第一个集合决定了它的返回类型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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |