From: Shin-ichiro Hara Date: 1998-11-23T12:28:33+09:00 Subject: [ruby-dev:3636] Re: block local variable (Re: スコープの範囲) 原です。 > 前田です。 > 新井> $/ := nil > $/はローカル変数ではないのでparse errorになってしまいます。 もともとの新井さんの要望は、システムに関わる大域変数を一時的に 変えたいということだったのでは?だからこれこそしたいことだった んですよね。 問題は3つあって (1)ブロック内で一時的に大域変数を変更したい場合がある (2)ブロック内で宣言された局所変数をブロック外に出した い場合がある (3)ブロック外で宣言された局所変数の変更をブロック内で 変更されたくない場合がある ということですよね。前田さんの := は(3)の場合に有効で あるわけですね。あるいはどうせ := を導入するならこの際大 きく文法を変えて(2)も解決してしまおうというわけか。 (1)は $/ の変更をせず gets(rs) を使うように、$KCODE を変 更せず正規表現の e,s,n オプションを使うように、各メソッドで対 応してもらうのがいいのではないかと思います。 (2)、(3)については、前田さんの提案は文法変えすぎじゃ ないかなあ。(^^;) ローカル変数には必ず宣言があり宣言した場所 がスコープを決定する、ということをもっと教育する、つまりマニュ アルで強調するのがいいのかもしれない。