ruby 类实例的东西让我头疼。我知道这...

class Foo
  @var = 'bar'
end

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

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

这是我将在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 中做同样的事情?

最佳答案

为了对比@khelll的答案,这在Class对象上使用了实例变量:

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"

编辑:以使实例对类的实例变量具有读访问权限:
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"

10-02 04:46
查看更多