小さな実験、ルビー類の祖先鎖について


Rubyのメソッド検索プロセスを理解するには、祖先チェーンの概念が非常に重要であり、同じモジュールが元の祖先チェーンのクラスに何度も混入した場合、新しい祖先チェーンはどうなるのか、小さな実験を行った.
 
module M; end
module M1; end
module M2; end

class MyClass
  include M
  include M1
end

class MySubClass < MyClass
  include M
  include M2
end

obj = MySubClass.new
puts obj.class.ancestors()
puts "


" puts BasicObject.superclass==nil def my_ancestors(current_class) a = [] a.push current_class sc = current_class.superclass until sc==nil a.push sc sc = sc.superclass end a end puts my_ancestors(obj.class)