モジュールのメソッドをクラスにインクルードしようとしていますが、インクルードを行っている基本クラスのクラス変数にアクセスするメソッドが含まれていますが、想定どおりに動作しません。コード:
class Awesome
@@name = "ME!"
end
module MyGem
module Namespace
def typist
puts @@name
end
end
end
if defined? Awesome
Awesome.class_eval do
include MyGem::Namespace
end
end
Awesome.new.typist # Test our new 'injected' instance method!
#=> NameError: uninitialized class variable @@name in MyGem::Namespace
私の Ruby のinclude
動作の理解は明らかに不安定です。インクルードはメソッドを基底クラスに組み込み、実行コンテキストは基底クラスになると考えていましたが、エラー メッセージは、含まれているメソッドの実行コンテキストがオリジナルにあることを暗示しているようです。メソッドのモジュール。
では、コード スニペットに示されているように、どうすればやりたいことを達成できるでしょうか? クラス変数を、インスタンス変数を使用するなど、他の実装に置き換えたり、それを機能させるために必要な方法で置き換えたりできれば幸いです:)。