0

我有许多模块,当它们被包含在内时,我希望它们调用一个“包含”函数。这个函数对所有模块都是一样的。因此我希望能够在一个包含这个函数模块并让所有这些子模块都包含它..这是一个人为的例子,但我需要类似....

module Humanable
  def self.extended(klass)
    klass.instance_eval do
      define_method :included do |base|
        puts 'I was just included into the Person Class'
      end
    end
  end
end

module Personable
  extend Human
end

class Person
  include Personable
end

当 Person 包含 Personable 时,它​​在哪里放置 Humanable 模块中的字符串。这不起作用,但希望你明白我该如何实现这一点?

4

1 回答 1

0

答案似乎是:

module Humanable
  def self.extended(klass)
    klass.define_singleton_method :included do |base|
      puts 'hello'
    end
  end
end

module Personable
  extend Humanable # does **not** puts 'hello'
end

class Person
  include Personable # puts 'hello'
end
于 2012-11-08T03:45:58.763 回答