为什么在 Ruby 中应该避免 @@class_variables?

发布于 2024-09-24 15:18:00 字数 252 浏览 8 评论 0原文

我知道有人说在 Ruby 中应该避免使用类变量(例如 @@class_var),而应该在类作用域中使用实例变量(例如 @instance_var) :

def MyClass
  @@foo = 'bar' # Should not do this.
  @foo = 'bar'  # Should do this.
end

为什么在 Ruby 中使用类变量不受欢迎?

I know that some say that class variables (e.g. @@class_var) should be avoid in Ruby and should use the an instance variable (e.g. @instance_var) in the class scope instead:

def MyClass
  @@foo = 'bar' # Should not do this.
  @foo = 'bar'  # Should do this.
end

Why is the use of class variables frowned upon in Ruby?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城缀染半城烟沙 2024-10-01 15:18:00

类变量经常受到诟病,因为它们有时在继承方面的行为令人困惑:

class Foo
  @@foo = 42

  def self.foo
    @@foo
  end
end

class Bar < Foo
  @@foo = 23
end

Foo.foo #=> 23
Bar.foo #=> 23

如果您使用类实例变量,您会得到:

class Foo
  @foo = 42

  def self.foo
    @foo
  end
end

class Bar < Foo
  @foo = 23
end

Foo.foo #=> 42
Bar.foo #=> 23

这通常更有用。

Class variables are often maligned because of their sometimes confusing behavior regarding inheritance:

class Foo
  @@foo = 42

  def self.foo
    @@foo
  end
end

class Bar < Foo
  @@foo = 23
end

Foo.foo #=> 23
Bar.foo #=> 23

If you use class instance variables instead, you get:

class Foo
  @foo = 42

  def self.foo
    @foo
  end
end

class Bar < Foo
  @foo = 23
end

Foo.foo #=> 42
Bar.foo #=> 23

This is often more useful.

蝶…霜飞 2024-10-01 15:18:00

当心;类 @@variables 和实例 @variables 不是同一件事。

本质上,当你声明一个类时
基类中的变量,它是共享的
与所有子类。改变其
子类中的值会影响
基类及其所有子类
一直到继承树。
这种行为通常正是
想要的。但同样常见的是,这
行为并非本意
程序员,这会导致错误,
特别是如果程序员没有
最初期望该类是
由其他人子类化。

来自: http://sporkmonger.com /2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby

Be careful; class @@variables and instance @variables are not the same thing.

Essentially, when you declare a class
variable in a base class, it’s shared
with all subclasses. Changing its
value in a subclass will affect the
base class and all of its subclasses
all the way down the inheritance tree.
This behavior is often exactly what’s
desired. But equally often, this
behavior is not what was intended by
the programmer, and it leads to bugs,
especially if the programmer did not
originally expect for the class to be
subclassed by someone else.

From: http://sporkmonger.com/2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文