Присвоение многих значений от одного объекта другому

#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 за ваше решение и интерпретацию моей болтовни! Сработало отлично!