2013-04-17 15 views
3

標準ruby庫中有一系列方法,即const_defined?,const_get或const_set。btw const_get和qualified_const_get有什麼區別?

const_defined?, const_get, const_set

而且也,在積極支持Rails的核心擴展,存在他們的「qualified_」中這些人。

qualified_const_defined?, qualified_const_get, qualifeid_const_set

是否有任何人誰可以解釋明確了對這些方法的貧乏和合格形式之間的區別是什麼?

預先感謝您。

回答

3

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 

I'd recommend poking around the source, too。它很乾淨。

+1

換句話說,一個是獲得名稱空間限定的常數。 – Chuck

+0

Object :: const_get和Object.const_get有什麼區別? –

+0

在我的情況(ruby 2.0)中,Object :: const_get「Foo :: Bar :: Baz」和Object :: qualified_const_get「Foo :: Bar :: Baz」顯示了沒有NameError的相同結果; 「富::酒吧::巴茲」。 –