本帖最后由 taroxd 于 2015-1-2 07:48 编辑
寒冷魔王 发表于 2015-1-2 00:34 ![]()
@实例变量 与 @@类变量 的作用域是不同的。实例变量是在类new(实例)的时候被创建,而类变量是该类作为Class ...
实例变量并不一定是在 new 的时候创建的,反例见7L
要个更加典型的反例的话
module SceneManager [url=home.php?mod=space&uid=420706]@Scene[/url] = nil @stack = nil # ... end
module SceneManager
[url=home.php?mod=space&uid=420706]@Scene[/url] = nil
@stack = nil
# ...
end
或者
module Cache def self.load_bitmap [url=home.php?mod=space&uid=341345]@Cache[/url] ||= {} end end
module Cache
def self.load_bitmap
[url=home.php?mod=space&uid=341345]@Cache[/url] ||= {}
end
end
class C def some_attribute @some_attribute ||= [] end end
class C
def some_attribute
@some_attribute ||= []
end
end
类变量和实例变量的主要区别在于作用域不同。本类及其子类,还有本类及其子类的实例中都可以访问到。因为可能被子类随意修改所以不建议使用。
---
就我个人而言,我总是会把实例变量和 self 关联在一起,根据 self 判断当前访问的是哪个对象的实例变量。
类变量嘛……从来不用,总是用类实例变量或者常量代替。 |