红宝石类身体继承

时间:2014-12-02 14:03:03

标签: ruby inheritance

我想知道红宝石中是否有这样的东西。

# 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

我想在需要时将类保持不变。但我想实现这一次,然后在子类中重复这个而不需要接触代码。

1 个答案:

答案 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#includedModule#extended

相关问题