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

我试图从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 < 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哦,好的。删除了错误的断言。在发布问题时,请尝试并包含准确的错误消息作为提示。如果堆栈跟踪指示一行,请描述哪一行产生错误。您说的“似乎不起作用”是什么意思?预期的行为是什么?当前的行为是什么?它没有返回所有动物的“谈话”方法,而是给了我一个错误。在发布问题时,请尝试包含确切的错误消息。如果堆栈跟踪指示一行,请描述哪一行产生错误。您说的“似乎不起作用”是什么意思?预期的行为和当前的行为是什么?它没有返回所有动物的“谈话”方法,它给了我一个错误。非常感谢我的帮助!在我的编程技能提高之前,我需要改进我的拼写。非常感谢您的帮助!在我的编程技能提高之前,我需要提高我的拼写。