我想知道红宝石中是否有这样的东西。
# file a.rb
class A
puts self
end
# file b.rb
require 'a'
class B < A; end
# file run.rb
puts 'start'
require 'a'
puts 'between'
require 'b'
puts 'end'
# expected output
$ ruby run.rb
# => start
# => A
# => between
# => B
# => end
# what i've got
# => start
# => A
# => between
# => end
我想在需要时将类保持不变。但我想实现这一次,然后在子类中重复这个而不需要接触代码。
答案 0 :(得分:5)
它没有输出B,因为已经评估了包含puts self
的A类块。当继承它时,它不会重新评估A类的主体。
从广义上讲,您可以将Ruby类视为要查找的方法哈希数组。继承类时,在查找列表中推送新的方法哈希。
话虽这么说,Class#inherited
功能可以让你做你想要的事情:
class A
def self.inherited(klass)
puts klass
end
end
class B < A
end
另请注意模块的两个相关方法:Module#included
和Module#extended
。