我如何在动态定义类的动态定义子类中动态定义一个常量,就像这样,但是没有NameError: uninitialized constant Foo::Bar
错误:
Object.const_set('Foo',Class.new) {|klass| klass.const_set('Bar', Class.new){|subklass| subklass.const_set(:YEP,'Yep!')}}
得到:
> Foo::Bar::YEP #=> 'Yep!'
最佳答案
将方法参数括在圆括号中时,大括号块将应用于方法调用,而不是列表中的最后一个参数。所以那些{ |klass| ... }
被传递给Object.const_set
而不是Class.new
。如果在块之后移动右括号,它将起作用,因为块被传递到Class.new
而不是Object.const_set
:
Object.const_set('Foo',Class.new { |klass|
klass.const_set('Bar', Class.new { |subklass|
subklass.const_set(:YEP,'Yep!')
})
})
Foo::Bar::YEP # => "Yep!"
关于ruby - 我如何在动态定义的类的动态定义的子类中动态定义一个常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51002860/