下面两个代码片段之间有什么区别(如果有的话)?
来自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)
Run Code Online (Sandbox Code Playgroud)
还有这个
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)
Run Code Online (Sandbox Code Playgroud)
要么
for (i <- 1 to 2)
for (j <- 1 to 2)
println(i, j)
Run Code Online (Sandbox Code Playgroud)
和
for (
i <- 1 to 2;
j <- 1 to 2
) println(i, j)
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 32
在这种情况下,没有区别.但是当使用yield时,有:
for (
i <- 1 to 2;
j <- 1 to 2
) yield (i, j)
Run Code Online (Sandbox Code Playgroud)
会给你包含序列(1,1),(1,2),(2,1)和(2,2).
for (i <- 1 to 2)
for (j <- 1 to 2)
yield (i, j)
Run Code Online (Sandbox Code Playgroud)
什么都不会给你,因为它会在每次迭代时生成序列(i,1),(i,2)然后将其抛弃.
Mis*_*hal 10
有时输出多维集合(例如表格矩阵)也很有用:
for (i <- 1 to 2) yield for (j <- 1 to 2) yield (i, j)
Run Code Online (Sandbox Code Playgroud)
将返回:
Vector(Vector((1,1), (1,2)), Vector((2,1), (2,2)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18469 次 |
| 最近记录: |