让我们先随你怎么会在任何为此启动其他语言,
的Java
String[] u = {1, 2, 3, 4, 5};
for (int i = 0; i < u.length(); i++) {
if (u[i] == 2) {
for (int j = 0; j < u.length(); j++) {
System.out.println("" + u[i] + ", " + u[j]);
}
}
}
的JavaScript,
var u = [1, 2, 3, 4, 5];
for (var i = 0; i < u.length(); i++) {
if (u[i] == 2) {
for (var j = 0; j < u.length(); j++) {
console.log("" + u[i] + ", " + u[j]);
}
}
}
而且你可以在Scala中用差不多相同的方式与for-loop
做到这一点。 (不要与for-comprehension
的概念相混淆)
val u = new Array(1, 2, 3, 4, 5)
for (i <- 0 until u.length()) {
if (u(i) == 2) {
for (j <- 0 until u.length()) {
println(s"${u(i)}, ${u(j)})
}
}
}
如果你想使用for-comprehension
然后,
val u = Array(1, 2, 3, 4, 5)
for {
i <- u.filter(_ == 2)
j <- u
} println(s"$i, $j")
至于“为什么你的代码不能正常工作?”。原因是你试图使用理解而没有真正理解这些,这导致了一个非常奇怪的外观和不正确的代码。
斯卡拉for-comprehension
的工作原理是根据使用各种方式使用的map
/flatMap
/foreach
/flatten
组合。
在这种情况下,换理解的版本是等同于以下foreach
基于以上版本,
val array = Array(1, 2, 3, 4, 5)
array.filter(_ == 2).foreach(i => {
array.foreach(j => println(s"$i, $j")
})
你让这里“for循环”和“内涵” Scala中没有按”之间的区别不存在。只有一个'for'关键字,并且它_always_引入了一种理解,可以按照你描述的方式进行解析。 –