#ruby-on-rails #ruby #iteration #parallel-processing #each
#ruby-on-rails #ruby #итерация #параллельная обработка #каждый
Вопрос:
Я пытаюсь написать функцию ruby, которая выполняет итерации по массиву строк, являющихся именами методов, и использует Object#send
метод для сохранения значений в новом объекте экземпляра (даже не уверен, что это законно), который является преобразованием уже существующего. Это лучшее, что я могу объяснить. Вот идея:
@example = RelatedClass.new
def example_method
instance_dependant_float = related_class.myvalue / other_related_class.myvalue
ARRAY_OF_METHODS.each do |t|
@example.send(t '=', self.related_class.t * instance_dependant_float)
end
end
Когда я пытаюсь запустить что-то подобное, где я вызываю индекс «t» в двух отдельных случаях (в моей отправке и в множителе), во втором случае ошибка nometoderror.
Комментарии:
1. 1) Что
ARRAY_OF_METHODS
? 2) Этоrelated_class
то же самое, чтоRelatedClass
? 3) Как проходит эта параллельная итерация?2. @AndrewGrimm 1) «массив строк, являющихся именами методов» . 2) Хороший вопрос для того, чтобы, возможно, найти лучшее решение, но не связанный с
NoMethodError
. 3) Это не так; я отредактировал название, чтобы оно соответствовало. 🙂3. Да, я сильно все испортил. Спасибо тебе, Фрогз, ты все прекрасно понял.
Ответ №1:
Вам нужно send
также получить значение:
ARRAY_OF_METHODS.each do |name|
@example.send( :"#{name}=", related_class.send(name) * some_float )
end
Я всегда использую и поддерживаю интерполяцию строк поверх String#
, и вам не нужно self.
, чтобы получить related_class
.
Комментарии:
1. Большое спасибо Phrogz за ваше решение и интерпретацию моей болтовни! Сработало отлично!