2017-06-04 15 views
0

なぜこのコードはints2.forEachから返されませんが、毎回level 1 xx ====を出力しますか? [email protected]ints2.forEachに設定しても違いはありません。このコードはints.forEachと意志出力 "レベル1 XX ====" 何度から戻らないのはなぜなぜこのコードはKotlinのラベルで返されません

fun foo() { 
    val ints = Array(5, {i->i}) 
    ints.forEach [email protected] { 
     println("level 1 $it ====") 
     val ints2 = Array(3, {i->i}) 
     ints2.forEach { 
      if (it == 2) [email protected] 
      println("level 2 $it") 
     } 
    } 
} 

fun main(args: Array<String>) { 
    foo() 
} 
+0

予想される出力を貼り付けることはできますか?私はあなたの質問を完全に理解していませんでした – harshavmb

答えて

2

?ラベル(あなたのケースで@let)に戻すことにより

、それだけでforEach内部のラムダ式から返されます。したがって、foo()は以下のコードと同等です(ラベルの代わりに無名関数を使用)。そのため、配列内の各値に対してブロックforEachが実行されます。詳細はhereです。

fun foo() { 
    val ints = Array(5, {i->i}) 
    ints.forEach(fun(it: Int) { 
     println("level 1 $it ====") 
     val ints2 = Array(3, {i->i}) 
     ints2.forEach { 
      if (it == 2) return 
      println("level 2 $it") 
     } 
    }) 
} 

は、そして私はints2.forEach にラベル "せを@" に設定したときに違いありません。

と同じ理由です。 @letラベルをints2.forEachに設定することにより、この内側のforEachブロックは、it == 2の前に2回実行されます。

関連する問題