Рубиновый эквивалент Python setattr () - PullRequest
8 голосов
/ 26 января 2010

Что ж, добавьте меня в список программистов на Python, которые влюбляются в Ruby, но у которых есть длительный PyAddiction. Как и в сообщении о getattr в Python, я ищу Ruby-эквивалент для этого:

setattr(obj, 'attribute', value)

где obj - это экземпляр объекта, атрибут - это имя одного из атрибутов объекта в виде строки, а значение - это значение этого объекта. Эквивалентный код:

obj.attribute = value

Я предполагаю, что это возможно (потому что все возможное в Python теперь кажется еще проще в Ruby), но не могу найти документацию по нему.

1 Ответ

15 голосов
/ 26 января 2010

Либо obj.instance_variable_set("@instance_variable", value), либо obj.send("instance_variable=", value).

Первый напрямую устанавливает переменную экземпляра. Последний вызывает метод setter, который, конечно, работает только при наличии метода setter, но с другой стороны также работает, если у вас есть метод setter, который на самом деле не только устанавливает переменную экземпляра (или не устанавливает экземпляр переменная вообще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...