Ruby 类变量 [英] Ruby class variables

查看:29
本文介绍了Ruby 类变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

ruby 类实例的东西让我很头疼.考虑到这一点,我理解...

The ruby class-instance stuff is giving me a headache. I understand given this...

class Foo
  @var = 'bar'
end

...@var 是所创建类的实例上的变量.

...that @var is a variable on the created class's instance.

但是如何创建子类可覆盖的类变量?

But how do I create a sub-class overridable class variable?

以下是我将在 Python 中执行的操作的示例:

Here is an example of what I would do in Python:

class Fish:
var = 'fish'
def v(self):
    return self.var

class Trout(Fish):
    var = 'trout'

class Salmon(Fish):
    var = 'salmon'

print Trout().v()
print Salmon().v()

输出:

trout
salmon

如何在 ruby​​ 中做同样的事情?

How do I do the same thing in ruby?

推荐答案

为了对比@khell 的回答,这里使用了 Class 对象上的实例变量:

To contrast @khelll's answer, this uses instance variables on the Class objects:

class Fish
  # an instance variable of this Class object
  @var = 'fish'

  # the "getter"
  def self.v
    @var
  end

  # the "setter"
  def self.v=(a_fish)
    @var = a_fish
  end
end

class Trout < Fish
  self.v = 'trout'
end

class Salmon < Fish
  self.v = 'salmon'
end

p Trout.v   # => "trout"
p Salmon.v  # => "salmon"

赋予实例对类的实例变量的读访问权限:

to give instances read-access to the class's instance variable:

class Fish
  def type_of_fish
    self.class.v
  end
end

p Trout.new.type_of_fish   # => "trout"
p Salmon.new.type_of_fish  # => "salmon"

这篇关于Ruby 类变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆