次世代Javaの動向 2at TECH
次世代Javaの動向 2 - 暇つぶし2ch70:デフォルトの名無しさん
06/05/21 03:36:44
おればかだから>>12,27,33,36の話がよくわかんなくて、groovyでコード
>>12の参照先とほぼ同じ書いてみてやっと分かった。

def closures = []
for( i in 0..10) {
closures[i] = { println i }
}
for( c in closures) {
c()
}

結果は同じように10がずらっと表示された。
これは、closuresに入っている各クロージャは、クロージャ外側の変数 i に
そのままアクセスできるわけだけど、実際に実行されるc()の段階では、
i は既に10になっちゃってるから、これがずらっと表示されると考えて
やっとしっくりきた。

>>56
def makeCounter( start) {
return { n -> return start += n }
}
def closure = makeCounter(0)
println( closure(1))
println( closure(2))

ってな感じなんで、つまりクロージャから参照された変数 start は、変数自体がスコープを
越えてもクロージャ内では普通につかえるし、クロージャがある限り存在しつづける、と。
インナークラスがエンクロージングクラスのインスタンス変数にアクセスできるようなもん
だけど、クロージャにはクロージャのスコープがあるので、一度クロージャが使った変数は
クロージャ内で存在し続ける、ということか。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch