私はこのコードを持っています:
class A
def print
puts CONSTANT
end
end
module B
CONSTANT = "Don't Panic!"
end
a
がクラス A のインスタンスであるとします。
CONSTANT
そのため、利用可能にするために見つけることができる定義が必要a.print
です。
次のようなシングルトンクラスにモジュールを含めることを検討しましたB
。a
a.singleton_class.send :include, B
a.print # error: CONSTANT isn't found
メソッドを呼び出しても問題ないと思いましたが、実際にはそうではありません。
次のコードが期待どおりに機能するため、定数は正常にインポートされるはずです。
a.singleton_class.constants # => [.., :CONSTANT, ..]
ただし、singleton classの代わりに定数をクラスに含めることで、次のように機能します。
a.class.send :include, B
a.print # prints: Don't Panic!
シングルトンクラスで定義された定数を参照できないのはおかしいと思いました。これが合理的である場合、その理由を知りたいです。
前もって感謝します。