在Ruby中的类范围声明"实例"变量的缺点是什么?

Dan*_*Tao 3 ruby scope instance-variables

我几乎从来没有在Ruby代码中看到过这个,但它似乎是有效的:

class Foo
  @bar = "bar"

  def self.print_bar
    puts @bar
  end
end
Run Code Online (Sandbox Code Playgroud)

我对上面的解释@bar是一个实例变量Foo,它是一个单例(?)实例Class.

这看起来与类变量(例如@@baz)不同,类变量可以在类范围以及实例范围中访问.

什么,如果有的话,像上面代码片段的代码的缺点?还是完全合理的代码?

Jör*_*tag 5

是的,这是完全有效的.它也被广泛使用,并且通常推荐使用具有非常大范围的类变量(类,类的所有实例,所有子类,所有子类的所有实例,......).

没有缺点.类是对象.对象可以包含实例变量.什么都没有.Ruby的对象模型确实很多人相比,甚至红宝石教程的作者简单,会让你宁愿相信.