讓我們先隨你怎麼會在任何爲此啓動其他語言,
的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_引入了一種理解,可以按照你描述的方式進行解析。 –