在Ruby中通过字符串访问成员?
我已经看了很高很低,也许我只是有点不练习,但我似乎找不到如何做到以下几点 我有一个字符串/符号,例如在Ruby中通过字符串访问成员?,ruby,Ruby,我已经看了很高很低,也许我只是有点不练习,但我似乎找不到如何做到以下几点 我有一个字符串/符号,例如“a”或:a。类B包含一个数据成员@a。我希望通过以下方式访问该成员: def method object_of_class_B, string_or_symbol_referencing_the_member object_of_class_B.some_other_method string_or_symbol_referencing_the_member = 010 end 所以我
“a”
或:a
。类B
包含一个数据成员@a
。我希望通过以下方式访问该成员:
def method object_of_class_B, string_or_symbol_referencing_the_member
object_of_class_B.some_other_method string_or_symbol_referencing_the_member = 010
end
所以我可以打电话:
method c, :a
就像我写的一样:
c.a = 010
有人能告诉我解决方案的方向吗?我是否完全错过了学习Ruby的一个关键部分?您可以使用
send
调用setter方法,如下所示:
object_of_class_B.send("#{ string_or_symbol_referencing_the_member }=", 010)
您可以使用
send
调用setter方法,如下所示:
object_of_class_B.send("#{ string_or_symbol_referencing_the_member }=", 010)
如果对象尚未具有属性的访问器,则可以在对象上使用 例如:
c = SomeClass.new
c.instance_variable_set(:@a, 'new value')
如果对象尚未具有属性的访问器,则可以在对象上使用 例如:
c = SomeClass.new
c.instance_variable_set(:@a, 'new value')
如果
a=
方法设置实例变量@a
而不执行任何其他操作,则这仅与调用c.a='newvalue'
具有相同的效果。例如,如果c
是一个活动记录对象,那么使用实例变量集将不会产生预期效果。尽管经过再三考虑,OP确实说他有一个实例变量@a。所以没关系,你是对的@xuinkrbin需要熟悉他/她正在“摆弄”的类。如果a=
方法设置实例变量@a
而不执行其他操作,那么这只与调用c.a='new value'
具有相同的效果。例如,如果c
是一个活动记录对象,那么使用实例变量集将不会产生预期效果。尽管经过再三考虑,OP确实说他有一个实例变量@a。所以没关系,你是对的@xuinkrbin需要熟悉他/她正在“摆弄”的班级。