2010-01-25 22 views
8

Bueno, agrégame a la lista de programadores de Python que se están enamorando de Ruby pero tienen una PyAddiction persistente. Al igual que el post sobre Python's getattr, estoy buscando el equivalente Rubí de hacer esto:Ruby equivalente de Python setattr()

setattr(obj, 'attribute', value) 

donde obj es una instancia de objeto, atributo es el nombre de uno de los atributos del objeto como una cadena, y el valor es el valor de ese objeto. El ser código equivalente:

obj.attribute = value 

estoy asumiendo que es posible (porque cualquier cosa es posible en Python parece aún más fácil en Ruby ahora), pero no puede encontrar documentación de la misma.

Respuesta

14

obj.instance_variable_set("@instance_variable", value) o .

El primero establece directamente la variable de instancia. Este último llama al método setter, que por supuesto solo funciona si hay un método setter, pero por otro lado también funciona si tienes un método setter que no solo establece una variable de instancia (o no establece una instancia) variable en absoluto).

+2

NB: el primer parámetro para 'instance_variable_set' y' send' también pueden ser símbolos – horseyguy