我如何在动态定义类的动态定义子类中动态定义一个常量,就像这样,但是没有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/

10-10 15:52