ruby 标准库中有一系列方法,即 const_define?、const_get 或 const_set。
const_defined?,
const_get,
const_set
而且,在 Rails 的 Active Support 核心扩展中,存在这些个体的“qualified_”对应项。
qualified_const_defined?,
qualified_const_get,
qualifeid_const_set
有谁可以明确解释这些方法的裸形式和限定形式之间的区别吗?
先感谢您。
Hyo
The qualified_
const 助手支持与任意深度的常量(不仅仅是主题的子级)进行交互。
我认为举个例子是解释这个问题最简单的方法。比方说Foo::Bar::Baz
exists:
> 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
The qualified_
方法允许您避免直接遍历模块层次结构:
> Object::qualified_const_get "Foo::Bar::Baz"
=> Foo::Bar::Baz
> Foo.qualified_const_set "Bar::Fizz", 123
=> 123
> Foo::Bar::Fizz
=> 123
我也建议浏览源代码 https://github.com/rails/rails/blob/11f6795b238172c4a13176062bd38b83285799b7/activesupport/lib/active_support/core_ext/module/qualified_const.rb。非常干净。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)