クラス Ryte::Theme があります。クラスで included_modules を呼び出すと、返されます (省略):
[Ryte::Bundleable::Core、Ryte::Bundleable::Validators、Ryte::Bundleable::Builder、ActiveModel::Validations::HelperMethods、ActiveModel::Validations、ActiveSupport::Callbacks、Ryte::Bundleable]
Ryte::Theme は、単一のモジュール Ryte::Bundleable を介してネストされたモジュールを取り込みます。関連するクラスとモジュールの定義は次のとおりです。
class Ryte::Theme
include Ryte::Bundleable
end
module Ryte::Bundleable
extend ActiveSupport::Concern
included do
include ActiveModel::Validations
include Ryte::Bundleable::Builder
include Ryte::Bundleable::Validators
include Ryte::Bundleable::Core
end
end
これを考えると、次の応答を受け取るのはなぜですか。
Ryte::Theme.include?(Ryte::Theme::Validators)
=> true
この追加モジュールは (まだ) 含めていません。これは、included_modules 応答で明らかです。これは ActiveSupport の懸念に関連していますか? Ryte::Theme::Validators をインクルードして mixin できるようにしたいのですが、すでにインクルードされていると見なされるため、「再び」インクルードしません (それが本当ならそうすべきではないため)。そのため、インクルードをクラス定義に追加すると、次のように取り残されます。
class Ryte::Theme
include Ryte::Bundleable
include Ryte::Theme::Validators # <- Does not load
end
この追加モジュール Ryte::Theme::Validators も混ざらないのはなぜですか?
追加した
わかりました:
1.9.3p194 :005 > Ryte::Bundleable::Validators == Ryte::Theme::Validators
=> true
奇妙な..これはなぜですか?