Project

General

Profile

Bug #7987

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

=begin 
 In the following example, `Method#parameters` *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 
 ~~~ =end 

Back