Bug #12478
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- 再現コード ```ruby > printer = String.new > printer.extend SingleForwardable > printer.def_delegator "STDOUT", :puts # NoMethodError: undefined method `method_defined?' for "":String ``` - 原因 - `def_single_delegator`で "`method_defined?`"を行っていますが、 def_single_delegatorで "method_defined?"を行っていますが、 - Moduleクラスをmix-inしていないオブジェクトの場合NoMethodErrorになる。 - 回避方法案 - Moduleが該当オブジェクトのclassに属していない場合,該当処理をスキップする ```diff --- /usr/local/.rbenv/versions/2.2.5/lib/ruby/2.2.0/forwardable.rb.org 2016-06-10 10:31:09.613979605 +0900 +++ /usr/local/.rbenv/versions/2.2.5/lib/ruby/2.2.0/forwardable.rb 2016-06-10 10:35:06.452506085 +0900 @@ -277,7 +277,7 @@ accessor = accessor.to_s if method_defined?(accessor) || private_method_defined?(accessor) accessor = "#{accessor}()" - end if + end if self.class === Module line_no = __LINE__; str = %{ def #{ali}(*args, &block) ```