From: Inaba Hiroto Date: 1998-06-23T00:24:59+09:00 Subject: [ruby-dev:2970] Re: criticize eval (was: Re: Re: experimental release 1.1b9_26) 出した時間が悪かったのか、下手なサブジェクトが悪かったのか、読みおとさ れてしまったようです。 From: Inaba Hiroto Subject: [ruby-dev:2945] criticize eval (was: Re: Re: experimental release 1.1b9_26) Date: Sat, 20 Jun 1998 02:14:44 +0900 > ですが、まだevalに疑問があります。以下のようになるのはなぜでしょう。 > > % ruby -e ' > p1 = proc{x = 0; proc{p x}}.call > x = nil > eval "x=1", p1 > p x > p1.call' > 1 > 0 > > % ruby -e ' > p1 = proc{x = 0; proc{p x}}.call > eval "x=1", p1 > p1.call' > 1 以下のようにすると一応自分が期待する挙動になるのですが、間違ってますで しょうか? --- parse.y.org Fri Jun 19 18:32:05 1998 +++ parse.y Sun Jun 21 20:00:20 1998 @@ -3436,17 +3436,15 @@ yyerror("Can't assign to __LINE__"); } else if (is_local_id(id)) { - if (local_id(id) || !dyna_in_block()) { + if (dyna_var_defined(id)) { + lhs = NEW_DASGN(id, val); + } + else if (local_id(id) || !dyna_in_block()) { lhs = NEW_LASGN(id, val); } - else{ - if (!dyna_var_defined(id)) { - dyna_var_push(id, 0); - lhs = NEW_DASGN_PUSH(id, val); - } - else { - lhs = NEW_DASGN(id, val); - } + else { + dyna_var_push(id, 0); + lhs = NEW_DASGN_PUSH(id, val); } } else if (is_global_id(id)) { -- 稲葉 浩人 (inaba@st.rim.or.jp)