Dam*_*ien 97
Object.const_get("User")
Run Code Online (Sandbox Code Playgroud)
无需要求ActiveSupport.
Chr*_*ung 61
您可以使用该Module#const_get方法.例:
irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
Run Code Online (Sandbox Code Playgroud)
sev*_*rin 29
如果您已加载ActiveSupport(例如在Rails中),您可以使用
"User".constantize
Run Code Online (Sandbox Code Playgroud)
psy*_*yho 26
推荐的方法是使用ActiveSupport的constantize:
'User'.constantize
Run Code Online (Sandbox Code Playgroud)
你也可以使用Kernel const_get,但是在Ruby <2.0中,它不支持命名空间常量,所以像这样:
Kernel.const_get('Foobar::User')
Run Code Online (Sandbox Code Playgroud)
将在Ruby <2.0中失败.因此,如果您需要通用解决方案,那么使用ActiveSupport方法是明智的:
def my_constantize(class_name)
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
raise NameError, "#{class_name.inspect} is not a valid constant name!"
end
Object.module_eval("::#{$1}", __FILE__, __LINE__)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27362 次 |
| 最近记录: |