[#1219] ruby animal — OZAWA Sakuro <crouton@...>

小澤さく@塩尻Internetです.

18 messages 1996/12/09

[#1256] ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

21 messages 1996/12/12
[#1257] Re: ruby 0.99.4-961212 available — Yasuo OHBA <jammy@...> 1996/12/12

大庭@SHLJapanです.

[#1258] Re: ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto) 1996/12/12

まつもと ゆきひろです.

[#1259] Re: ruby 0.99.4-961212 available — WATANABE Hirofumi <watanabe@...> 1996/12/12

わたなべです.

[#1261] Re: ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto) 1996/12/12

まつもと ゆきひろです.

[#1290] ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

32 messages 1996/12/17
[#1300] Re: ruby 0.99.4-961217 will be available — sinara@... 1996/12/17

原です。

[#1305] Re: ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto) 1996/12/17

まつもと ゆきひろです.

[#1308] Re: ruby 0.99.4-961217 will be available — gougi@... (Shigeru Gougi) 1996/12/17

ごうぎ@TCIです。

[#1341] Re: ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto) 1996/12/18

まつもと ゆきひろです.

[#1342] Re: ruby 0.99.4-961217 will be available — sinara@... 1996/12/18

原です。

[#1345] [BUG?] access string out of range — sinara@... 1996/12/18

原です。

[#1330] Re: Rational and Complex — Shin-ichiro Hara <sinara@...>

原です。

30 messages 1996/12/17
[#1335] Re: Rational and Complex — sinara@... 1996/12/18

原です。

[#1359] Re: Rational and Complex 1996/12/18

けいじゅ@SHLジャパンです.

[#1423] 配列への grep — (Dezawa Shin-ichiro) <dezawa@...>

出沢です

14 messages 1996/12/23

[#1469] wish ... — Noritugu Nakamura <nnakamur@...>

25 messages 1996/12/24
[#1470] Re: wish ... — matz@... (Yukihiro Matsumoto) 1996/12/24

まつもと ゆきひろです.

[ruby-list:1211] Re: [Q] Scope of local variable

From: matz@... (Yukihiro Matsumoto)
Date: 1996-12-09 02:37:23 UTC
List: ruby-list #1211
まつもと ゆきひろです.

In message "[ruby-list:1209] [Q] Scope of local variable"
    on 96/12/08, Shin-ichiro Hara <sinara@blade.nagaokaut.ac.jp> writes:
|
|原です。
|
|どうもループの中の局所変数の扱いが分からなくなってし
|まいました。

まず大原則

  * ローカル変数のバインドは静的に行われています.
  * ローカル変数は最初の代入文で定義されます.

これを適用すると

|------------^ test1.rb
|for i in 0..1
|  print defined?(j), "\n"
|  j = 0
|end
|------------$ test1.rb

|FALSE
|FALSE
|
|と出力されます。これはなぜでしょう?

が理解できると思います.

|------------^ test2.rb
|#j = 0
|for i in 0..2
|  print "1)", defined?(j), "\n"
|  j = -100 if FALSE
|  print "2)", defined?(j), "\n"
|  print "3)", j, "\n"
|  j = j+1
|end
|------------$ test2.rb
|
|の結果は
|
|1)FALSE
|2)local-variable
|3)nil
|1)FALSE
|2)local-variable
|3)1
|1)FALSE
|2)local-variable
|3)2
|
|となります。「j = -100 if FALSE」で j が定義されるのは
|なぜでしょうか?さらに一辺、未定義になっても前回の値を
|記憶しているのも不思議です。最初の行の j = 0 のコメント
|を外せば期待通りの出力ですが。

最初の疑問は

  * 代入という操作で変数が定義される訳ではなく,代入文が現れ
    ることによって(実行されなくても)定義される

という原則で説明されます.変数が定義されている範囲は静的に決
まりますが(最初の代入文からブロックの終わりまで),その範囲で
未定義だからといって変数が無くなる訳ではないです.

つまり

|------------^ test2.rb
|#j = 0
|for i in 0..2
|  print "1)", defined?(j), "\n"
*  j = -100 if FALSE
>  print "2)", defined?(j), "\n"
>  print "3)", j, "\n"
>  j = j+1
>end
|------------$ test2.rb

*の行の代入文によってローカル変数jが定義され,>の範囲内で定
義されています.定義されているとはプログラム中でjという識別
子によってその変数にアクセスできるかどうかをしめすものです.

# これにさらに動的変数が絡むとますますややこしくなるんですけ
# ど,ここでは説明しません.

                                まつもと ゆきひろ /:|)

In This Thread