[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:754

From: sheepman <sheepman sheepman.sakura.ne.jp>
Date: Thu, 29 Dec 2005 23:39:28 +0900
Subject: [yarv-dev:754] Re: open> defined?(yield) always returns "yield"

こんばんは、sheepman です。
以下のように、eval の中で defined?(yield) を呼ぶと、
ruby-1.9 と返す値が違ってしまいます。

$ cat t.rb
def hoge
  p eval("defined?(yield)")
end
hoge(){}

$ ruby-1.9 -v t.rb
ruby 1.9.0 (2005-12-28) [i686-linux]
nil

$ ./miniruby -v t.rb
ruby 1.9.0 (2005-11-18) [i686-linux]
YARVCore 0.3.3 (rev: 341) [opts: ]
warning: useless use of defined? in void context
"yield"

これは、ruby-1.9 の方のバグのような気もしますが、仕様なのかも知れません。
eval("defined?(yield)") は eval 自身にブロックが与えられているかを、
判断しているようです。 というわけで、以下のようなコードは
意外なことに ruby-1.9 ではなんだか動いてしまうようです。

$ cat t.rb
p eval("yield"){"hoge"}

$ ruby-1.9 -v t.rb
ruby 1.9.0 (2005-12-28) [i686-linux]
"hoge"

$ ./miniruby -v t.rb
ruby 1.9.0 (2005-11-18) [i686-linux]
YARVCore 0.3.3 (rev: 341) [opts: ]
t.rb:1:in `eval': (eval):1:in `<main>': no block given (yield) (LocalJumpError)
        from t.rb:1:in `eval'
        from t.rb:1:in `<main>'

-- 
sheepman / TAMURA Takashi
sheepman sheepman.sakura.ne.jp http://sheepman.parfait.ne.jp/
   

-- 
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       744 2005-12-28 20:08 [sheepman sheepman.sa] open> defined?(yield) always returns "yield"
       747 2005-12-28 23:43 ┗[ko1 atdot.net       ] fixed> Re: open> defined?(yield) always returns "yield"
->     754 2005-12-29 23:39  ┗[sheepman sheepman.sa] Re: open> defined?(yield) always returns "yield"