新手问题 Module 中生成 methods 覆盖的问题。

henry · 2015年09月15日 · 最后由 henry 回复于 2015年09月15日 · 1704 次阅读

现有代码如下(代码有问题,就是我想解决的问题):

module M
  def self.extended(klass)
      klass::ROLES.each do |r|
        define_method r do
          puts klass::RESULTS[r]
        end
      end
  end
end

class A
  ROLES = [:a, :b]
  RESULTS = {a: 1, b: 2}
  extend M
end

class B
  ROLES = [:a, :b]
  RESULTS = {a: 3, b: 4}
  extend M
end

期望结果: A.a #=> 1 A.b #=> 2 B.a #=> 3 B.b #=> 4 实际结果: A.a #=> 3 A.b #=> 4 B.a #=> 3 B.b #=> 4

求大神指教!

define_method 换成 klass.define_singleton_method

手机回复,可能拼错,你先试试

#1 楼 @serco 多谢!可以了!汗!!还要再去好好读读书啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号