[ruby-list:49576] Re: define_method内でsuper(*args)を呼ぶとエラーになる

From: SASADA Koichi <ko1@...>
Date: 2013-09-02 17:40:07 UTC
List: ruby-list #49576
ご指摘ありがとうございます。

> この挙動はRubyの仕様なのでしょうか、それともバグでしょうか?
> もしも仕様なのでしたら、なぜこのような挙動になっているのでしょうか?

エラーメッセージの通り、無引数 super だけだと define_method では対応しな
いよ、と言っております。
しかし、*args 付けてるので、これをエラーにするのはおかしいですね。バグな
気がします。調べます。


#
# ところで、2.1.0 だと foo は private メソッドになるので、
# そもそも呼べないのですね。
class C; self; end.send(:define_method, :foo){}
C.new.foo
#=> OK on ruby 2.0.0p299 (2013-08-29) [i386-mswin32_110]
#=> NG on ruby 2.1.0dev (2013-09-02 trunk 42770) [i386-mswin32_110]
t.rb:2:in `<main>': private method `foo' called for #<C:0x2b7a6cc>
(NoMethodError)

こういう define_method の使い方は初めて見たのですが、よく使う書き方なん
でしょうか(そもそも define_method は嫌いなので使わないという)。

-- 
// SASADA Koichi at atdot dot net

In This Thread