红宝石类身体继承

SZM*_*MER 1 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
Run Code Online (Sandbox Code Playgroud)

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

Den*_*rdy 5

它不输出B,因为puts self已经评估了包含的A类块.从继承它时,它不会重新评估A类的主体.

从广义上讲,您可以将Ruby类视为要查找的方法哈希数组.继承类时,在查找列表中推送新的方法哈希.

话虽如此,该Class#inherited功能将允许您做您正在寻找的:

class A
  def self.inherited(klass)
    puts klass
  end
end

class B < A
end
Run Code Online (Sandbox Code Playgroud)

另请注意模块的两个相关方法:Module#includedModule#extended.