我猜想是一些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方法。 这也是我这么称呼它的原因。 Im过去不允许在函数名称中使用\“ = \”。 这就是为什么我认为它会有一些特殊的含义。 谢谢你的帮助。 编辑2: 我只是以为我真的覆盖了作业,而不仅是getter。我把这一切弄混了。 对不起,谢谢。     
已邀请:
您已经(误导)将您的二传手命名为
instance_variable
。它不是实例变量,而是一种设置实例变量的方法。 当您调用
self.instance_variable=
时,您正在调用该方法。直接设置ѭ4you时,就是设置变量本身,这就是为什么不调用setter方法的原因。 更惯用的命名约定如下所示:
def name=(value)
  @name = value
end
当然,对于简单的传递型获取器和设置器,您可以使用
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
在这种情况下,“ 2”只是一个局部变量,方法退出后将立即将其丢弃。局部变量优先于实例方法,并且实例变量始终以“ 9”符号开头。     

要回复问题请先登录注册