class MyClass
def instance_variable=(var)
puts "inside getter"
instance_variable = var
end
def function_1
self.instance_variable = "whatever"
end
def function_2
@instance_variable = "whatever"
end
end
myclass = MyClass.new
myclass.function1
结果与控制台上的“内部吸气器”
myclass.function2
没有。
我是Ruby新手,不知道差异,无法在网上找到它......
提前致谢!
编辑:
我假设通过附加“=”,我为隐式定义的实例变量“instance_variable”覆盖了一个getter方法。
这也是我这样称呼它的原因。
我不习惯在函数名中使用“=”。
这就是为什么我认为它会有一些特殊含义。
感谢您的帮助。
EDIT2:
我只是认为我真的覆盖了作业而不仅仅是吸气剂。我把它搞砸了。
抱歉,谢谢。
答案 0 :(得分:4)
你有(误导性)命名你的二传手instance_variable
。它不是实例变量,它是一个设置实例变量的方法。
当您致电self.instance_variable=
时,您正在调用该方法。直接设置@instance_variable
时,您自己设置变量,这就是不调用setter方法的原因。
更惯用的命名约定如下:
def name=(value)
@name = value
end
当然,简单来说,传递类型的getter和setter可以使用
attr_reader :name #generates getter only
attr_writer :name #generates setter only, not very common
attr_accessor :name #generates getter and setter
上述方法是语法糖,它为您生成get和/或set方法。如果需要,可以稍后重写它们以提供其他功能。
编辑:我看到你做了一个更新,只是想指出这个方法根本没有设置实例变量:
def instance_variable=(var)
puts "inside getter"
instance_variable = var
end
在这种情况下,instance_variable
只是一个局部变量,一旦方法退出就会被丢弃。局部变量优先于实例方法,实例变量始终以@
符号开头。