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

From: Koga Osamu <osak.63@...>
Date: 2013-09-03 15:56:46 UTC
List: ruby-list #49578
古賀です。

素早い対応、ありがとうございます。
やはりバグだったんですね。

On 2013年09月03日 02:40, SASADA Koichi wrote:
> #
> # ところで、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 は嫌いなので使わないという)。
> 

2.1.0だと、sendでむりやりdefine_methodを呼び出しても定義されたメソッドは
privateになってしまうんでしょうか?
有名な方法なのかはよく知らないですが、こういう形のコードは他のところでも
見たことがあるので、どこかでイディオムとして紹介されていたのかもしれませ
んね……。

-- 
***************************************
* 古賀 理
* Twitter: @osa_k
* e-mail: osak.63@gmail.com
***************************************

In This Thread

Prev Next