私はStruct.newを使用して、その場で新しいクラスを作成しています(エンティティモデリングミドルウェアを使用しており、シリアル化のためにその場で具象型を生成したいと考えています)。
本質的に、私はこのコードを持っています:
module A
def self.init_on(target)
target.foo = 123
end
end
$base_module = A
module Test
C = Struct.new(:id) do
include $base_module
@@base = $base_module
def initialize
@@base.init_on(self)
end
attr_accessor :foo
end
end
c = Test::C.new
puts c.foo
テストを実行すると、次のエラーが発生します。
test2.rb:17:in initialize': uninitialized class variable @@base in Test::C (NameError)
from test2.rb:24:in
new'from test2.rb:24:in `'
Struct.newの私の理解から、ブロックは作成されているクラスのコンテキストで実行されるため、@@baseは解決可能である必要があります。
御時間ありがとうございます!
編集:ありがとう-私はinit_on self.init_onを作成し、instance_variable_setではなくclass_variable_setを使用しました。今は動作します!