我如何动态定义动态定义的动态定义类的子类内部的常量,如下所示,但没有NameError: uninitialized constant Foo::Bar错误:
Object.const_set('Foo',Class.new) {|klass| klass.const_set('Bar', Class.new){|subklass| subklass.const_set(:YEP,'Yep!')}}
Run Code Online (Sandbox Code Playgroud)
要得到:
> Foo::Bar::YEP #=> 'Yep!'
Run Code Online (Sandbox Code Playgroud)
在括号中包装方法参数时,花括号块将应用于方法调用,而不是列表中的最后一个参数.所以这些{ |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!"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |