2010-07-02 5 views
14

¿Hay alguna manera de hacer algo como esto?Ruby: utilizando Object.send para asignar variables

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) 

El último resultado en la línea de error:

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

Respuesta

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

foo.bar = baz no es una llamada al método bar seguido de una asignación - es una llamada al método bar=. Por lo tanto, debe indicar send para llamar a ese método.

+0

Quieres decir 'bar ='. – Adrian

+0

@Adrian: Sí, lo hice. Gracias. – sepp2k

3

Cambie la última línea a:

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

Si conoce el nombre de la variable de antemano

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

Si c es una variable dinámica a continuación, puede hacerlo de esta manera

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