Forum: Ruby-core [ruby-trunk - Bug #7987][Open] Method#parameters should consider a prepended or refined methd

C0225f8150e28b85666b511e0bbca258?d=identicon&s=25 no6v (Nobuhiro IMAI) (Guest)
on 2013-02-28 14:54
(Received via mailing list)
Issue #7987 has been reported by no6v (Nobuhiro IMAI).

----------------------------------------
Bug #7987: Method#parameters should consider a prepended or refined
methd
https://bugs.ruby-lang.org/issues/7987

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version:
ruby -v: ruby 2.1.0dev (2013-02-28 trunk 39535) [x86_64-linux]


=begin
In the following example, *Method#parameters tell the number of argument
is one,
but actual methods take two arguments. I got confused..

 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 # => #<PC:0x00000001285888>
 pm.parameters # => [[:req, :a]]
 pc = PC.new
 pc.method(:m).owner # => #<PC:0x00000001285888>
 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
=end
F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 Nobuyoshi Nakada (nobu)
on 2014-04-22 09:36
(Received via mailing list)
Issue #7987 has been updated by Nobuyoshi Nakada.

Description updated
Status changed from Open to Closed

Seems fixed already.

----------------------------------------
Bug #7987: Method#parameters should consider a prepended or refined
methd
https://bugs.ruby-lang.org/issues/7987#change-46287

* 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 # => #<PC:0x00000001285888>
 pm.parameters # => [[:req, :a]]
 pc = PC.new
 pc.method(:m).owner # => #<PC:0x00000001285888>
 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
~~~
F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 Nobuyoshi Nakada (nobu)
on 2014-04-22 09:42
(Received via mailing list)
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 # => #<PC:0x00000001285888>
 pm.parameters # => [[:req, :a]]
 pc = PC.new
 pc.method(:m).owner # => #<PC:0x00000001285888>
 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
~~~
This topic is locked and can not be replied to.