贴上代码:
运行结果:
warning: class variable access from toplevel
2
版本是 Ruby 2.0
我想问的是,为什么输出的是 2 而不是 1
运行结果:
warning: class variable access from toplevel
2
版本是 Ruby 2.0
我想问的是,为什么输出的是 2 而不是 1
|
toctanDec 17, 2013
1
由于没有指定 scope, @@a = 2 直接定义在 Object 上, 而 class variable 是由基类和继承类共享的,所以运行结果是 2,看下面
https://gist.github.com/toctan/7990091 另外,Ruby 的 class variable 有很多神奇的地方,很多人都建议避免使用,其实,基本上也不会怎么用到: http://makandracards.com/makandra/14229-the-many-gotchas-of-ruby-class-variables http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/ |
|
ShiningRayDec 17, 2013
2
所以一般是用类自身的实例变量
|
|
3
我知道类变量的行为很奇怪,坑也比较多,但是不想逃避这一关,最终还是想弄懂它。
@toctan 恩,谢谢你的解释。但是仍然让我疑惑的是:为什么 class A 中的 @@a 会被 Object 中的 @@a 覆盖?是不是给 Object 中的 @@a 赋值后,这个类变量就转移到 Object 中了?我知道类变量是在类和子类(继承体系)中共享,但是这个共享的规则也太奇怪了。 |
|
5
@tang3w 正是因为在继承关系中class variable的不符合常理的行为,才导致很多人不建议使用ruby的类变量。
至少我遇到的情况,在考虑用类变量的时候,类class instance variable总会是更好的选择。 |