Ответ 1
a.send(:c=, b.send(:c))
foo.bar = baz
не является вызовом метода bar
, за которым следует назначение - это вызов метода bar=
. Поэтому вам нужно сообщить 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)
^
a.send(:c=, b.send(:c))
foo.bar = baz
не является вызовом метода bar
, за которым следует назначение - это вызов метода bar=
. Поэтому вам нужно сообщить send
, чтобы вызвать этот метод.
Измените последнюю строку на:
a.send(:c=, b.send(:c))
Если вы знаете имя переменной заранее
a.send(:c=, b.send(:c))
Если c
- динамическая переменная, вы можете сделать это как
c = 'my_key'
a.send("#{c}=", b.send(c))