下面两个代码片段之间有什么区别(如果有的话)?
Scala编程的Ch7示例
def grep(pattern: String) =
for (
file <- filesHere
if file.getName.endsWith(".scala");
line <- fileLines(file)
if line.trim.matches(pattern)
) println(file + ": " + line.trim)
和这一个
def grep2(pattern: String) =
for (
file <- filesHere
if file.getName.endsWith(".scala")
) for (
line <- fileLines(file)
if line.trim.matches(pattern)
) println(file + ": " + line.trim)
或者
for (i <- 1 to 2)
for (j <- 1 to 2)
println(i, j)
和
for (
i <- 1 to 2;
j <- 1 to 2
) println(i, j)
答案 0 :(得分:31)
在这种情况下没有区别。但是当使用yield时,有:
for (
i <- 1 to 2;
j <- 1 to 2
) yield (i, j)
会为您提供包含(1,1)
,(1,2)
,(2,1)
和(2,2)
的序列。
for (i <- 1 to 2)
for (j <- 1 to 2)
yield (i, j)
不会给你任何东西,因为它会在每次迭代时生成序列(i,1)
,(i,2)
,然后将其抛弃。
答案 1 :(得分:9)
有时输出多维集合(例如表格矩阵)也很有用:
for (i <- 1 to 2) yield for (j <- 1 to 2) yield (i, j)
将返回:
Vector(Vector((1,1), (1,2)), Vector((2,1), (2,2)))