我没有看到别人在红宝石中使用的eval,所以我假设没有它就可以完成。但我不知道如何。
(1..9).each { |n|
eval "user_#{n} = prefix << '_' << user_#{n} if user_#{n}"
}
答案 0 :(得分:6)
使用哈希而不是局部变量重写代码,你可以抛弃eval:
(1..9).each { |n|
user[n] = prefix << '_' << user[n] if user[n]
}
BTW,我认为您不想使用上面的<<
,因为它也会修改您的prefix
。
答案 1 :(得分:2)
如果要将其实现为数组,可以尝试
users.map! do |user|
user ? "#{prefix}_#{user}" : nil
end
假设users
已经定义。
答案 2 :(得分:-1)
您可以使用ruby的define_method动态定义方法。
您可以使用eval
中的define_method
替换基于class_eval
的语句。
但是,这取决于具体情况。用动态方法替换eval
可能有点过分。
您需要为问题提供更多背景信息才能获得更好的答案。