我希望有一个接受字符串的方法,然后使用该字符串的名称更新变量。这是我尝试的一个例子:
@other_class = OtherClass.new()
def change_variable(variable_string)
self.@other_class.send.variable_string += 1
end
我收到错误:
语法错误,意外的tIVAR
指针在上面方法中的'send'之前。有没有人有任何建议让这项工作?
答案 0 :(得分:2)
您可能想要instance_variable_set http://ruby-doc.org/core-2.0/Object.html#method-i-instance_variable_set
我认为使用变量的语法是:
other_var = ('@' + variable_string).to_sym
@other_class.instance_variable_set( other_var, @other_class.instance_variable_get( other_var ) + 1 )
答案 1 :(得分:1)
直接的合成错误是您错误地使用了self
和@
。
任何一方都可以,但不能相互结合。
所以在你的情况下self.other_class.send...
会好的,但你不能将它声明为@
。
和@
一样,但是你不能self
。
这些是为了做不同的事情,而这些是
@
是一个实例变量,self
也是如此,但区别在于使用@
直接调用属性other_class
,而self
调用的位置other_class
方法@
。
所以@other_class = my_milk_man
是一个getter和setter,所以你可以做到
self.other_class
至于哪里
->
self.other_class (as getter)
self.other_class = my_milk_man
,
self.other_class= (as setter)
- > {{1}}。