2017-03-03 197 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_引入了一种理解,可以按照你描述的方式进行解析。 –