1
toctan 2013-12-17 00:51:22 +08:00
由于没有指定 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/ |
2
ShiningRay 2013-12-17 02:10:09 +08:00
所以一般是用类自身的实例变量
|
3
tang3w OP 我知道类变量的行为很奇怪,坑也比较多,但是不想逃避这一关,最终还是想弄懂它。
@toctan 恩,谢谢你的解释。但是仍然让我疑惑的是:为什么 class A 中的 @@a 会被 Object 中的 @@a 覆盖?是不是给 Object 中的 @@a 赋值后,这个类变量就转移到 Object 中了?我知道类变量是在类和子类(继承体系)中共享,但是这个共享的规则也太奇怪了。 |
4
fwee 2013-12-17 11:58:02 +08:00 1
@tang3w 是很奇怪啊,所以《ruby编程语言》中建议不要用,还有人提过issue建议删掉这个功能,你既然知道这个规则奇怪就代表你已经弄懂了,就是这么奇怪
|