まつもと ゆきひろです
In message "[ruby-list:8480] Re: scope of local variables"
on 98/06/23, Takao KAWAMURA <kawamura / ike.tottori-u.ac.jp> writes:
|> 後者では x が最初に代入された場所がブロックの内部なので,x
|> はブロック内ローカル変数だとみなされた
|
|ここでいうブロックはeachイテレータのブロックということですよ
|ね? ifがスコープを作るわけではないですよね?
ええ,rubyでスコープを作るのは
トップレベル
class/module/def ..end
do .. end/{ } (ブロック)
の3つです.スコープは基本的にはネストしないのですが,最後の
ブロックによるものは例外で外側のスコープが見えます.
|イテレータ内の変数って、一度ループを回るごとに未定義状態にな
|るのでしょうか。毎回yieldされることを考えると当然そうなのか
|な。
ブロック内で初出の変数(ブロック内ローカル変数)は毎回初期化さ
れます.
|> 「普通の」ローカル変数は先頭で代入(宣言)しておく
|>
|> という「ローカル変数のオキテ」に従うことを強くお勧めします.
|
|そうなのですか…。rubyは宣言しなくていいから楽だなあと思って
|いたのですが。だけど、配列とかハッシュだとどうせ宣言しないと
|いけないし、宣言することで統一すればいいのかな。
そうですね.ローカル変数における「楽」を追求するためには上記
のローカル変数の(ちょっと?)複雑なルールを理解してからにして
下さいませ.
まつもと ゆきひろ /:|)