Rubyで遊んでました。Ruby-list:236


#ruby-list:236
#p foo ローカル変数は最初に代入が必要なのでアウト。エラーです。
p foo = 1 #=>これはセーフでしょう。1
i0 = 1; print i0;p defined? i0 #=>1"local-variable"
loop{i1=5; print i1; break}; p defined? i1 #=>5nil ilはloopを抜けると参照できない。

i = 0
p1 = proc{|n| p i = n}
p2 = proc{p i}
p1.call(5) #=>5
p i #=>5
p2.call() #=>5
#スコープを共有している手続きオブジェクトはローカル変数も共有している。

def foo
i = 15
get = proc{i}
set = proc{|n| i = n}
return get, set
end
p1 = foo; p2 = foo
p p1
p p2

begin #以下はエラーになります。beginとendの間
p1.call()
p2.call(2)
p1.call()
end

=begin
#意味不明です。
手続きオブジェクトで特別な点は,ローカル変数の共有はスコープ
から抜けても続くことだ.つまり,上の例におけるp1, p2がスコー
プの外に渡されてもローカル変数iの共有は続く(この場合,変数i
はp1,p2からしかアクセスできなくなる).
=end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です