one step to the right, then up

在上一节中提到了 one step to the right, then up,现在写一个例子来证明这句话


one step to the right, then up_第1张图片

就在之前的那个程序上进行修改,现在我也不清楚,如果程序虫obj出发,会不会走到 #D, #C, #Object

单从one step to the right, then up,这句话来讲,应该不会

 

为了证明程序只向右执行一次,我在类D的eigenclass中添加一个与类C同名的实例方法, a_method

然后创建一个类D的实例,调用a_method

1. 如果程序只向右执行一次,那么它的方法查找路径应该是

: #obj, D, C, Object

 

class C
  def a_method
    puts "C#a_method"
  end

  def self.a_class_method
    puts "C#a_class_method"
  end
end

class D < C
  class << self
    def a_method
      puts "#D, a_method"
    end
  end
end

obj = D.new
puts obj.a_method

class Object
  def eigenclass
    class << self
      self
    end
  end
end

class << obj
  def a_singleton_method
    puts 'obj#a_singleton_method'
  end
end
 

结果是: C#a_method

并没有进入到类D的eigenclass中,证明了对one step to the right, then up的猜测是正确的~

你可能感兴趣的:(method)