2017-03-03 117 views
-3
val u = Array(1,2,3,4,5)       
var outsideValue = 7        

for{ 
i <- 0 until u.size 
_= outsideValue = u(i) 
if(outsideValue == 2) 
j <- u 
} 
{ 

println(s"$outsideValue $j") 

`Expected output is it should print all combination of Array with value 2, but it is not printing !!!` 

注意循環問題:我知道我們可以在樸 做到這一點,但我想知道爲什麼上面的代碼是不工作斯卡拉與分配

回答

0

讓我們先隨你怎麼會在任何爲此啓動其他語言,

的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") 
}) 
+0

你讓這裏「for循環」和「內涵」 Scala中沒有按」之間的區別不存在。只有一個'for'關鍵字,並且它_always_引入了一種理解,可以按照你描述的方式進行解析。 –