【发布时间】:2020-05-13 22:09:12
【问题描述】:
我担心included 块。在这个例子中,它设置了一个类实例变量。
require 'active_support/concern'
module Mod1
extend ActiveSupport::Concern
included do
p "#{self}: included Mod1"
@foo = "foo is set"
end
class_methods do
def foo
@foo
end
end
end
如果我包含它,我会得到方法 foo 并设置包含的变量。
class Parent
include Mod1
end
p Parent.foo # "Parent: included Mod1" "foo is set"
但是如果我从 Parent 继承,我继承方法 foo,但包含的块没有运行。
class Subclass < Parent
end
p Subclass.foo # nil
即使我包含模块,包含的块也不会运行。我期待因为Subclass.include?(Mod1) 是真的。
class Subclass < Parent
include Mod1
end
p Subclass.foo # nil
p Subclass.include?(Mod1) # true
如何编写关注点,使其included 块甚至在子类上运行?
【问题讨论】:
标签: ruby-on-rails ruby activesupport-concern