实例变量——我猜是Ruby内部的一些变量


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只是一个局部变量,一旦方法退出,就会被丢弃。局部变量优先于实例方法,并且实例变量始终以@符号开头。

相关内容

  • 没有找到相关文章

最新更新