例如:
class Animal
def make_noise
print NOISE
end
end
class Dog < Animal
NOISE = "bark"
end
d = Dog.new
d.make_noise # I want this to print "bark"
Run Code Online (Sandbox Code Playgroud)
我如何完成上述工作?目前它说
uninitialized constant Animal::NOISE
Run Code Online (Sandbox Code Playgroud)
Phr*_*ogz 27
我认为你真的不想要一个常数; 我认为你想在类上有一个实例变量:
class Animal
@noise = "whaargarble"
class << self
attr_accessor :noise
end
def make_noise
puts self.class.noise
end
end
class Dog < Animal
@noise = "bark"
end
a = Animal.new
d = Dog.new
a.make_noise #=> "whaargarble"
d.make_noise #=> "bark"
Dog.noise = "WOOF"
d.make_noise #=> "WOOF"
a.make_noise #=> "whaargarble"
Run Code Online (Sandbox Code Playgroud)
但是,如果您确定需要常量:
class Animal
def make_noise
puts self.class::NOISE
# or self.class.const_get(:NOISE)
end
end
Run Code Online (Sandbox Code Playgroud)
没有类实例变量的一种方法:
class Animal
def make_noise
print self.class::NOISE
end
end
class Dog < Animal
NOISE = "bark"
end
d = Dog.new
d.make_noise # prints bark
Run Code Online (Sandbox Code Playgroud)