Ruby: использование Object.send для назначения переменных

Есть ли способ сделать что-то вроде этого?

a = Struct.new(:c).new(1)
b = Struct.new(:c).new(2)

a.send(:c)
=> 1

b.send(:c)
=> 2

a.send(:c) = b.send(:c)

Последняя строка приводит к ошибке:

syntax error, unexpected '=', expecting $end
a.send(:c) = b.send(:c)
            ^

Ответы

Ответ 1

a.send(:c=, b.send(:c))

foo.bar = baz не является вызовом метода bar, за которым следует назначение - это вызов метода bar=. Поэтому вам нужно сообщить send, чтобы вызвать этот метод.

Ответ 2

Измените последнюю строку на:

a.send(:c=, b.send(:c))

Ответ 3

Если вы знаете имя переменной заранее

a.send(:c=, b.send(:c))

Если c - динамическая переменная, вы можете сделать это как

c = 'my_key'
a.send("#{c}=", b.send(c))