2010-07-02 11 views
14

C'è un modo per fare qualcosa del genere?Ruby: using Object.send per l'assegnazione delle variabili

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) 

L'ultimo risultato in linea di errore:

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

risposta

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

foo.bar = baz non è una chiamata al metodo bar seguito da un incarico - è una chiamata al metodo bar=. Quindi devi dire allo send di chiamare quel metodo.

+0

Intendi 'bar ='. – Adrian

+0

@Adrian: Sì, l'ho fatto. Grazie. – sepp2k

3

Modificare l'ultima riga a:

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

Se si conosce il nome della variabile in anticipo

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

Se c è una variabile dinamica allora si può fare in questo modo

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