如何将字符串转换为User
?如何在Ruby中将字符串转换为常量?
回答
您可以使用Module#const_get
方法。例如:
irb(main):001:0> ARGV
=> []
irb(main):002:0> Kernel.const_get "ARGV"
=> []
如果你的ActiveSupport加载(例如,在Rails的),你可以使用
"User".constantize
推荐的方法是使用的ActiveSupport的constantize:
'User'.constantize
你也可以使用内核const_get
,但在Ruby < 2.0中,它不支持命名空间常量,所以像这样:
Kernel.const_get('Foobar::User')
将在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
从Ruby 2.0开始,const_get也可以用于命名空间常量 – untidyhair 2014-03-29 17:56:31
由于Ruby 2.0已经达到了EOL,所以不再需要将ActiveSupport作为依赖来引用带有字符串的常量。 :-) – Drenmi 2017-01-02 11:25:23
另请参阅''User'.safe_constantize' – 2017-03-14 18:15:24
Object.const_get("User")
无需需要的ActiveSupport。
+1积极支持污染一般红宝石问题。 – 2013-01-18 22:27:48
使用Ruby魔术方法:eval()
:
eval("User") #=> User
这可能是一个完整的矫枉过正,因为'eval'并不意味着要这样使用,应该完全避免使用更具体的替代方案。 – yagooar 2015-08-20 12:45:51
- 1. Ruby:将常量转换为字符串
- 2. C:将常量字符串转换为常规字符串
- 3. 如何在Ruby中转换字符串
- 4. 如何在Ruby 1.9中将哈希转换为JSON字符串?
- 5. 如何在Ruby中将字符串的值从字符串转换为数组?
- 6. 如何在Ruby中将字符串列表转换为一个字符串?
- 7. 如何在Ruby中将空白字符串转换为CSV字符串?
- 8. 如何将字符串转换为Ruby中的字节?
- 9. 将字符串转换为DateTime Ruby
- 10. Ruby - 将Integer转换为字符串
- 11. Ruby将字符串转换为文件
- 12. Ruby - 将字符串转换为日期
- 13. Ruby将字符串转换为散列
- 14. 如何将逐字字符串转换为常规Unicode字符
- 15. 无法将字符串转换为常量字符/字符串*为int *
- 16. 无法将字符串转换为常量字符
- 17. 如何将字符串转换为非字符串在matlab中
- 18. 如何将常量字符*转换为常量无符号字符*
- 19. 如何将IO对象转换为Ruby中的字符串?
- 20. 如何将图像字符串转换为Ruby中的流
- 21. 如何将时间字符串转换为Ruby中的秒数
- 22. 如何在Liferay JSP中将JSTL变量转换为字符串?
- 23. 如何在VB中将对象转换为字符串变量?
- 24. 将字符串^和字符串^集合转换为常量字符*
- 25. 在Ruby中将0-F字符串转换为字节数组
- 26. Ruby将字符串数组转换为字符串
- 27. 如何将字符串转换为对Ruby中变量的引用?
- 28. 将矢量转换为字符串
- 29. vhdl:将矢量转换为字符串
- 30. 将字符串转换为变量
你们是不是要调用一个变量函数? – harbichidian 2010-03-02 06:55:09
我也想回答这个问题;然而,你是否试图创建一个基于字符串的新常量,或者找到一个已经初始化的常量?你也在寻找香草红宝石还是Rails? – onebree 2015-08-26 20:37:20