0

我了解局部变量仅限于声明它们的范围,并且只要类存在,实例变量就存在,但是如果您在类范围中声明局部变量而不用前缀会发生@什么?即使您没有使用 an@将其声明为实例变量,这不是隐含的吗?

4

2 回答 2

2

只要类存在,实例变量就存在

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

如果你在类范围内声明一个局部变量而不用@作为前缀会发生什么?

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

即使您没有使用 @ 将其声明为实例变量,这不是隐含地使其成为实例变量吗?

不。

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

于 2012-12-17T17:50:42.423 回答
1

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

于 2012-12-17T17:54:49.217 回答