Есть ли способ сделать это без Eval? - PullRequest
1 голос
/ 04 апреля 2011

Я не вижу, чтобы eval часто использовался другими в ruby, поэтому я предполагаю, что это можно сделать без него.Но я не понимаю, как.

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

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Перепишите ваш код, используя хеш вместо локальных переменных, и вы можете отказаться от eval:

(1..9).each { |n|
  user[n] = prefix << '_' << user[n] if user[n]
}

Кстати, я думаю, вы не хотели использовать << выше, так как это также изменит ваш prefix.

2 голосов
/ 04 апреля 2011

Если вы хотите реализовать это как массив, вы можете попробовать

users.map! do |user|
  user ? "#{prefix}_#{user}" : nil
end

, предполагая, что users уже определено.

0 голосов
/ 04 апреля 2011

Вы можете определить метод динамически, используя ruby's define_method.

Вы можете заменить eval операторы на основе define_method, заключенные в class_eval.

Но это зависит от ситуации. Возможно, было бы излишне заменять eval динамическим методом.

Вам нужно предоставить больше контекста для вашего вопроса, чтобы получить лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...