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"