3

标准 ruby​​ 库中有一系列方法,即 const_defined?、const_get 或 const_set。

const_defined?, const_get, const_set

而且,在 Rails 的 Active Support Core Extensions 中,存在这些人的“合格_”对应物。

qualified_const_defined?, qualified_const_get, qualifeid_const_set

有没有人可以明确解释这些方法的裸形式和合格形式之间的区别?

先感谢您。

4

2 回答 2

3

const 助手支持与任意深度的qualified_常量交互(不仅仅是主题的孩子)。

我认为一个例子是解释这一点的最简单方法。假设Foo::Bar::Baz存在:

 > Object::const_get "Foo::Bar::Baz"
NameError: wrong constant name Foo::Bar::Baz
 > Object::const_get "Foo"
=> Foo
 > Foo.const_get "Bar"
=> Foo::Bar
 > Foo::Bar.const_get "Baz"
=> Foo::Bar::Baz

这些qualified_方法允许您避免直接遍历模块层次结构:

 > Object::qualified_const_get "Foo::Bar::Baz"
=> Foo::Bar::Baz
 > Foo.qualified_const_set "Bar::Fizz", 123
=> 123
 > Foo::Bar::Fizz
=> 123

我也建议在源头上四处寻找。它很干净。

于 2013-04-17T22:27:59.203 回答
0

你可能会觉得这很有趣:

http://redcorundum.blogspot.com/2006/05/kernelqualifiedconstget.html

于 2013-04-17T22:29:04.160 回答