Ruby中如何给变量名追加count后缀动态生成实例变量
错误原因
- 你直接将字符串拼接/插值语法放在赋值语句左侧的写法不符合Ruby语法规则,Ruby会优先计算左侧表达式的值,再尝试给这个静态值赋值,自然会抛出方法未定义的报错
- 插值语法
#{}只能在字符串字面量内部使用,无法直接用于生成动态变量名
正确实现方式
要动态设置实例变量,需使用Ruby提供的instance_variable_set内核方法,示例代码如下:
3.times do |i| count = i + 1 # 第一个参数为实例变量名的字符串形式,第二个参数为要赋的值 instance_variable_set("@psychological_safety_score_#{count}", Team.get_psychological_safety_score(@team, count)) end
执行完成后,你就可以直接调用@psychological_safety_score_1、@psychological_safety_score_2、@psychological_safety_score_3三个实例变量取值。
更推荐的实现方案
独立声明多个序号命名的实例变量维护成本较高,更推荐用实例哈希存储所有分数:
# 初始化哈希 @psychological_safety_scores = {} 3.times do |i| count = i + 1 @psychological_safety_scores[count] = Team.get_psychological_safety_score(@team, count) end
后续取值直接用@psychological_safety_scores[1]即可,遍历、修改都更方便。
内容的提问来源于stack exchange,提问作者Mark Locklear
相关产品推荐
相关产品推荐

