[#139] ruby 0.97 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/13
[#145] Re: The black face. — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/14
[#182] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:178] Re: DOS port
1 message
1996/02/20
[#184] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:181] Re: DOS port
1 message
1996/02/20
[#185] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:183] Re: DOS port
1 message
1996/02/20
[#196] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:183] Re: DOS port
1 message
1996/02/26
[#198] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:197] Re: DOS port
1 message
1996/02/26
[#201] Re: ruby for JPower — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/26
[ruby-list:215] Re: TUTORIAL - procedure object
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-02-27 11:15:25 UTC
List:
ruby-list #215
まつもと ゆきひろ@トヨタケーラムです.
In message "[ruby-list:213] Re: TUTORIAL - procedure object"
on 96/02/27, 石塚圭樹 <keiju@csg.mes.co.jp> writes:
|けいじゅ@事開事.三井造船です.
|引数が複数ある時は? どうなるのでしょう?
こうですね.
ruby> proc{|n1,n2| printf "0x%x 0x%x\n", n1, n2}.call(32,64)
0x20 0x40
|Smalltalkですと, ブロック内の変数はそのブロックを定義している変数と同
|じになりますよね. rubyの場合も同じなのでしょうか? それとも, procにロー
|カルな変数が存在する?
スコープを共有している手続きオブジェクトはローカル変数も共有
します.
ruby> i=0
0
ruby> p1 = proc{|j| i=j}
#<Proc>
ruby> p2 = proc{print i, "\n"}
#<Proc>
ruby> p1.call(5)
5
ruby> i
5
ruby> p2.call
5
nil
注意すべき点はふたつあります.
ローカル変数の共有はスコープから抜けても続きます.つまり,上
の例におけるp1, p2がスコープの外に渡されてもローカル変数iの
共有は続きます(この場合,p1,p2からしかアクセスできなくなる).
これも例をあげましょう.
ruby> def foo
ruby| i = 15
ruby| get = proc{i}
ruby| set = proc{|n| i = n}
ruby| return get, set
ruby| end
ruby> p1, p2 = foo
[#<Proc>, #<Proc>]
ruby> p1.call
15
ruby> p2.call(2)
2
ruby> p1.call
2
もう一つはイテレータブロックの中ではじめて現れた変数(最初の
例だとj)は共有されないことです.これはこの後「ローカル変数」
のところで説明します.