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方法
这也是我这么称呼它的原因。
我以前不被允许在函数名中使用"="。
这就是为什么我认为它会有一些特殊的意义。
谢谢你的帮助。
第2版:
我只是觉得我真的改写了作业,而不仅仅是getter。我把一切都搞混了。
对不起,谢谢。
您已(误导性地(将您的setter命名为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
只是一个局部变量,一旦方法退出,就会被丢弃。局部变量优先于实例方法,并且实例变量始终以@
符号开头。