Ruby 定义的方法出现未定义?
我试图从Peter Cooper的ruby开始重新创建一个示例Ruby 定义的方法出现未定义?,ruby,Ruby,我试图从Peter Cooper的ruby开始重新创建一个示例 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
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
类动物
属性存取器:名称
def初始化(名称)
@name=name
结束
结束
猫类<动物类
def谈话
放“喵!”
结束
结束
类狗<动物
def谈话
放“汪!”
结束
结束
牛类<动物类
def谈话
放“哞!”
结束
结束
羊类<动物类
def谈话
把“呸”
结束
结束
动物=[Cat.new.initilize(“老虎”)、Dog.new.initilize(“生姜”)、Cow.new.initilize(“格雷塔”)、Sheep.new.initilize(“莎莉”)]
每只动物都有| x|
x、 谈话
结束
包括单独调用该方法在内的各种尝试似乎都不起作用。我不确定问题是否出在继承上。请提供帮助。您的代码有一些问题:
initialize
,而不是initilize
。类上定义的具有此名称的方法是特殊的,因为它们返回类的实例Cat.new.initilize(“Tiger”)
这是不正确的。您永远不会手动调用initialize
方法。当您调用Cat.new(“Tiger”)
并将参数传递给它时,它会自动运行您的代码存在一些问题:
initialize
,而不是initilize
。类上定义的具有此名称的方法是特殊的,因为它们返回类的实例Cat.new.initilize(“Tiger”)
这是不正确的。您永远不会手动调用initialize
方法。当您调用Cat.new(“Tiger”)
并将参数传递给它时,它会自动运行您的代码在几个地方出错
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}
将给予
喵喵代码>
Woof代码>
Moo代码>
bahhh
您的代码在几个地方出错
您应该将方法名称从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}
将给予
喵喵代码>
Woof代码>
Moo代码>
bahhh
啊,非常感谢您修复了它。我想学习编程的第一步就是学习拼写,非常感谢!保罗·杜卡:如果这个答案解决了你的问题,请接受它作为答案。这有助于保持整洁。initialize
绝对没有什么特别之处。这是一种和其他方法一样的方法initialize
返回它返回的任何内容,您完全可以更改它的返回值。@JörgWMittag哦,好的。删除了错误的断言。啊,非常感谢您修复了它。我想学习编程的第一步就是学习拼写,非常感谢!保罗·杜卡:如果这个答案解决了你的问题,请接受它作为答案。这有助于保持整洁。initialize
绝对没有什么特别之处。这是一种和其他方法一样的方法initialize
返回它返回的任何内容,您完全可以更改它的返回值。@JörgWMittag哦,好的。删除了错误的断言。在发布问题时,请尝试并包含准确的错误消息作为提示。如果堆栈跟踪指示一行,请描述哪一行产生错误。您说的“似乎不起作用”是什么意思?预期的行为是什么?当前的行为是什么?它没有返回所有动物的“谈话”方法,而是给了我一个错误。在发布问题时,请尝试包含确切的错误消息。如果堆栈跟踪指示一行,请描述哪一行产生错误。您说的“似乎不起作用”是什么意思?预期的行为和当前的行为是什么?它没有返回所有动物的“谈话”方法,它给了我一个错误。非常感谢我的帮助!在我的编程技能提高之前,我需要改进我的拼写。非常感谢您的帮助!在我的编程技能提高之前,我需要提高我的拼写。