[#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:1212] Summary (Re: [Q] Scope of local variable)

From: sinara@...
Date: 1996-12-09 07:40:56 UTC
List: ruby-list #1212
原です。

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

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

> 定義されているとはプログラム中でjという識別
> 子によってその変数にアクセスできるかどうかをしめすものです.


とのこと、良く分かりました。しばらくすると忘れてしまいそうな
ので、未整理で冗長ですが、ここで自分のために perl との比較も
入れて書き留めておきます。


<< 局所変数について >>

【1】ローカル変数のバインドは静的に行われ、ローカル変数は最初の代
  入文で定義される。

  この場合、静的とは、実行前にスクリプトのコード上で、という感じの
  意味。

例:
-----^ test1.rb
for i in 0..1
  print defined?(j), "\n"
  j = 1
  print defined?(j), "\n"
end
-----$ test1.rb
==>
------^
FALSE
local-variable
FALSE
local-variable
------$

となる。これは Perl5 の

-----^ test1.pl
for($i = 0; $i <=1; $i++) {
  print defined($j), "\n";
  local($j) = 1;
  print defined($j), "\n";
}
-----$ test1.pl
==>
------^

1

1
------$

で類似の結果が得られるが(Perl4 ではまた違う結果になる。)、その
意味は異なる。ruby では、j がループのブロックでは局所化されない。

例:
-----^ test1a.rb
j = 2
for i in 0..0
  j = 1
end
print j, "\n"          # ==> 1
-----$ test1a.rb

-----^ test1a.pl
$j = 2;
for($i = 0; $i <= 0; $i++) {
  local($j) = 1;
}
print $j, "\n";         # ==> 2
-----$ test1a.pl


【2】イテレータのブロックでは、そこで初めて定義されたローカル変数は
  局所化される。

例:
-----^ test2.rb
[0].each do |i|
  j = 1
  print j, "\n"           # ==> 1
end
print defined?(j), "\n"   # ==> FALSE
-----$ test2.rb


イテレータではブロック外部のローカル変数(小文字で始まるの変数)にアク
セス出来る。

例:
-----^ test2a.rb
j = 2
[0].each do |i|
  print j, "\n"        # ==> 2
  j = 1
end
print j, "\n"          # ==> 1
-----$ test2a.rb


メソッドの定義では外部のローカル変数(小文字で始まるの変数)にアクセス
できない。

例:
-----^ test2b.rb
j = 2
def foo
  print defined?(j), "\n"  # ==> FALSE
  j = 1
end
foo
print j, "\n"              # ==> 2
-----$ test2b.rb


【3】定義は、代入を実行することによってなされるのではなく、実行以前に
  スクリプト中に代入文が現れたときになされる、

例:
-----^ test3.rb
print defined?(j), "\n"  # ==> FALSE
j = 1 if FALSE
print defined?(j), "\n"  # ==> local-variable
-----$ test3.rb


【4】定義とは、いわばアクセス権を与えることである。defined?(j) は、
  j という名前の変数へのアクセス権の有無を判定する。その場でアクセ
  ス権がない名前の変数でも、存在していないわけではない。

例:
-----^ test4.rb
for i in 0..1
  print "1)", defined?(j), "\n"
  j = 1 if FALSE
  print "2)", j, "\n"
  j = j+1
end
-----$ test4.rb
==>
-----^
1)FALSE
2)nil
1)FALSE
2)1
-----$


イテレータブロック内のローカル変数は、各回ごとに消滅する。

-----^ test4a.rb
[0,1].each do |i|
  print "1)", defined?(j), "\n"
  j = 1 if FALSE
  print "2)", j, "\n"
  j = j+1
end
-----$ test4a.rb
==>
-----^
1)FALSE
2)nil
1)FALSE
2)nil
-----$


他にも気をつけることあるかな。

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

うーん、こわい。気になるなあ。^^;

In This Thread