Ruby中如何在%w语法里直接使用常量而无需#{...}插值?
核心结论
- %w 是Ruby专门用于创建纯字面量字符串数组的语法,内部所有内容都会被当作原始字符串处理,不会解析常量、变量,也不会执行任何表达式求值,因此无法在不使用插值的情况下直接在%w中引用常量拿到对应值。
- 实现你需求最简便的写法完全不需要用%w,直接写普通数组字面量即可:
[C1, C2],运行后得到的就是你要的['vC1', 'vC2']格式的数组。
补充说明
- 你提到的
%w("#{C1}" "#{C2}")写法实际是错误的:%w 会把引号也识别为字符串的一部分,最终得到的数组元素是带双引号的"\"vC1\"",和你预期的纯值不符,不要使用这种写法。 - 如果需要批量读取多个有固定命名规律的常量,可以用反射方法简化代码,比如针对C1、C2这种前缀加数字的常量,可以这么写:
# 批量读取C1到C2的常量值生成数组 arr = (1..2).map { |i| Object.const_get("C#{i}") }
内容的提问来源于stack exchange,提问作者Michel Keijzers
相关产品推荐
相关产品推荐

