Python setattr() 的 Ruby 等价方法

9

好的,把我加入喜欢Ruby但仍然有Python瘾的Python程序员列表中。就像关于Python的getattr的帖子一样,我正在寻找Ruby实现以下操作的等价方法:

setattr(obj, 'attribute', value)

其中obj是对象实例,attribute是该对象的一个属性名称(以字符串形式表示),value是该属性的值。等效代码如下:

obj.attribute = value

我猜这是可能的(因为在Python中可行的事情现在似乎在Ruby中更容易),但找不到相关文档。
1个回答

15
无论是obj.instance_variable_set("@instance_variable", value)还是obj.send("instance_variable=", value)都可以使用。
前者直接设置实例变量,而后者调用setter方法。当然,只有存在setter方法时后者才有效,但反过来,如果您拥有一个不仅仅是设置实例变量(或根本不设置实例变量)的setter方法,则后者也可以正常工作。请注意保留HTML标记。

2
注意:instance_variable_setsend的第一个参数也可以是符号。 - horseyguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接