From: nobu@... Date: 2014-04-22T07:41:58+00:00 Subject: [ruby-core:62131] [ruby-trunk - Bug #7987] Method#parameters should consider a prepended or refined methd Issue #7987 has been updated by Nobuyoshi Nakada. Related to Bug #7993: owner of methods defined after using Module#prepend added ---------------------------------------- Bug #7987: Method#parameters should consider a prepended or refined methd https://bugs.ruby-lang.org/issues/7987#change-46288 * Author: Nobuhiro IMAI * Status: Closed * Priority: Normal * Assignee: * Category: core * Target version: * ruby -v: ruby 2.1.0dev (2013-02-28 trunk 39535) [x86_64-linux] * Backport: ---------------------------------------- In the following example, `Method#parameters` tell the number of argument is one, but actual methods take two arguments. I got confused.. ~~~ruby RUBY_DESCRIPTION # => "ruby 2.1.0dev (2013-02-28 trunk 39535) [x86_64-linux]" module PM def m(a, b) :pm end end class PC prepend PM def m(a) :pc end end pm = PC.instance_method(:m) pm.owner # => # pm.parameters # => [[:req, :a]] pc = PC.new pc.method(:m).owner # => # pc.method(:m).parameters # => [[:req, :a]] pc.m(:a) # => ArgumentError pc.m(:a, :b) # => :pm class RC def m(a) :rc end end module RM refine RC do # !> Refinements are experimental, and the behavior may change in future versions of Ruby! def m(a, b) :rm end end end using RM rm = RC.instance_method(:m) rm.owner # => RC rm.parameters # => [[:req, :a]] rc = RC.new rc.method(:m).owner # => RC rc.method(:m).parameters # => [[:req, :a]] rc.m(:a) # => ArgumentError rc.m(:a, :b) # => :rm ~~~ -- https://bugs.ruby-lang.org/