本地和实例变量之间的差异

时间:2012-12-17 17:47:08

标签: ruby

我理解局部变量仅限于它们声明的范围,只要该类存在,实例变量就存在,但是如果在类范围内声明局部变量而不使用@作为前缀,会发生什么? ?即使您没有使用@将其声明为一个变量,它是否隐含地是一个实例变量?

2 个答案:

答案 0 :(得分:2)

  只要类存在,就会存在

实例变量

只要对象存在,它们就存在。实例变量是每个对象,而不是每个类。

  

如果在类范围中声明局部变量而不使用@?

作为前缀,会发生什么

然后变量在类定义中的范围内,但不在该类定义中的任何def内,因为它们引入了新的范围。

  

这是不是隐含地使它成为一个实例变量,即使你没有用@来声明它呢?

没有

如果使用define_method而不是def来创建方法,则可以在方法中访问局部变量,但由于变量只存在一次(每个对象不存在一次),因此它们会起作用在这种情况下,更像是类变量而不是实例变量。我也想不出你为什么这么用它们的好理由。

答案 1 :(得分:1)

使用@makes为您创建的对象的实例变量。当您使用该对象执行操作时,可以设置局部变量,但在使用后它们会消失。只要有对象,实例变量就会保持不变。