Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby-为什么要将参数分配给实例变量?_Ruby_Instance Variables - Fatal编程技术网

Ruby-为什么要将参数分配给实例变量?

Ruby-为什么要将参数分配给实例变量?,ruby,instance-variables,Ruby,Instance Variables,有时我会看到这样的代码 class Thing def self.add_em(a,b) a+b end end 有时我看到 class Thing def self.add_em(a,b) @a=a @b=b @a+@b end end 什么时候/为什么我应该使用@实例变量,而不是只使用传递的参数 我相信其中一个原因是,如果您想在任何其他方法中使用这些变量,那么实例变量将可用,而基于参数的局部变量将不可用。然而,我经常看到@variables

有时我会看到这样的代码

class Thing
  def self.add_em(a,b)
    a+b
  end
end
有时我看到

class Thing
  def self.add_em(a,b)
    @a=a
    @b=b
    @a+@b
  end
end
什么时候/为什么我应该使用
@
实例变量,而不是只使用传递的参数

我相信其中一个原因是,如果您想在任何其他方法中使用这些变量,那么实例变量将可用,而基于参数的局部变量将不可用。然而,我经常看到@variables被使用,即使这些变量没有在任何其他方法中使用

所以我看到了 @a=a @b=b
在方法开始时,所有传入的参数都被大量使用,但我不清楚为什么它们只用于该方法。如果实例变量用于其他方法,这只是一种惯例吗?

正如您正确认识到的,定义实例变量是没有意义的,除非它们用于其他方法。如果使用了实例变量,但没有在任何其他方法中调用,那么该代码可能不是由优秀的程序员编写的

但请注意,有时,方法定义乍一看并不明显。例如,如果有

class Thing
  attr_reader :a
end

然后实际上有一种方法使用了
@a

正如您正确认识到的,定义实例变量是没有意义的,除非它们在另一种方法中使用。如果使用了实例变量,但没有在任何其他方法中调用,那么该代码可能不是由优秀的程序员编写的

但请注意,有时,方法定义乍一看并不明显。例如,如果有

class Thing
  attr_reader :a
end

然后实际上有一个方法使用了
@a

,我想说他们这样做是因为他们计划将参数作为实例变量引用。如果不是的话,他们的雅格尼失败了(你不需要它的原则)。如果他们中途改变了主意(这是众所周知的…),他们就会忘记整理。

我认为他们这样做是因为他们计划将参数作为实例变量引用。如果不是的话,他们的雅格尼失败了(你不需要它的原则)。如果他们中途改变了主意(这是众所周知的…),他们就会忘记整理。

你知道答案,你写的答案是正确的。但这取决于你是如何在你的代码库中使用OOP设计的。我遇到这个问题是因为我回答了你的另一个问题,这个问题被关闭、删除、取消删除。这一点似乎也是完全合理的,而且“几乎不完全基于观点”。无论如何,我同意你得到的答案。我只想补充一点,我在
initialize
方法中看到了@a=a@b=b模式,您几乎总是希望保存参数以供以后使用。您知道答案,您编写的答案是正确的。但这取决于你是如何在你的代码库中使用OOP设计的。我遇到这个问题是因为我回答了你的另一个问题,这个问题被关闭、删除、取消删除。这一点似乎也是完全合理的,而且“几乎不完全基于观点”。无论如何,我同意你得到的答案。我只想补充一点,我在
initialize
方法中看到了@a=a@b=b模式,您几乎总是希望保存参数以备将来使用。听起来您脑子里有特定的代码。是吗?我?放一些我原来不需要的代码?“忘了”整理。你有多大的胆量,先生?:)听起来你脑子里好像有特定的代码。是吗?我?放一些我原来不需要的代码?“忘了”整理。你有多大的胆量,先生?:)