有没有办法在没有评估的情况下做到这一点?

时间:2011-04-04 18:02:57

标签: ruby

我没有看到别人在红宝石中使用的eval,所以我假设没有它就可以完成。但我不知道如何。

(1..9).each { |n|
    eval "user_#{n} = prefix << '_' << user_#{n} if user_#{n}"
}

3 个答案:

答案 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可能有点过分。

您需要为问题提供更多背景信息才能获得更好的答案。