我试图通过Peter Cooper从开始红宝石重新创建一个例子。
class Animal
attr_accessor :name
def initilize(name)
@name = name
end
end
class Cat < Animal
def talk
puts "Meow!"
end
end
class Dog < Animal
def talk
puts "Woof!"
end
end
class Cow < Animal
def talk
puts "Moo!"
end
end
class Sheep < Animal
def talk
puts "Bahhhh"
end
end
animals = [Cat.new.initilize("Tiger"), Dog.new.initilize("Ginger"), Cow.new.initilize("Gretta"), Sheep.new.initilize("Sally")]
animals.each do |x|
x.talk
end
包括单独调用该方法的各种尝试似乎都不起作用。我不确定问题是否与继承有关。请帮忙。
答案 0 :(得分:3)
您的代码存在一些问题:
拼写为initialize
,而不是initilize
。在类上定义此名称的方法是特殊的,因为它们返回类的实例。
当您执行以下操作时:Cat.new.initilize("Tiger")
不正确。您永远不会手动调用initialize
方法。当您调用Cat.new("Tiger")
并将参数传递给它时,它会自动运行。
答案 1 :(得分:2)
你的代码在几个地方都错了。
initilize
更改为initialize
。Cat.new.initilize("Tiger")
来创建对象,而不是Cat.new("Tiger")
。代码更改后,您将获得所需的结果。
animals = [Cat.new("Tiger"), Dog.new("Ginger"), Cow.new("Gretta"), Sheep.new("Sally")]
animals.each {|x| puts x.talk}
将给出
Meow!
Woof!
Moo!
Bahhhh