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"