Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中通过字符串访问成员?_Ruby - Fatal编程技术网

在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需要熟悉他/她正在“摆弄”的班级。