const_get和合格的const_get之间有什么区别?

时间:2013-04-17 22:13:44

标签: ruby-on-rails activesupport

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

const_defined?, const_get, const_set

此外,在Rails的Active Support Core Extensions中,存在这些人的“qualified_”对应物。

qualified_const_defined?, qualified_const_get, qualifeid_const_set

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

提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

我认为一个例子是解释这一个的最简单方法。我们假设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

I'd recommend poking around the source, too。它很干净。

答案 1 :(得分:0)