我想知道红宝石中是否有这样的东西是可能的.
# 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)
我想在需要时将类保持不变.但我想实现这一次,然后在子类中重复此操作而不接触代码.
它不输出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#included和Module#extended.