定义的方法未定义?

时间:2016-06-22 18:10:34

标签: ruby

我试图通过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

包括单独调用该方法的各种尝试似乎都不起作用。我不确定问题是否与继承有关。请帮忙。

2 个答案:

答案 0 :(得分:3)

您的代码存在一些问题:

  1. 拼写为initialize,而不是initilize。在类上定义此名称的方法是特殊的,因为它们返回类的实例。

  2. 当您执行以下操作时:Cat.new.initilize("Tiger")不正确。您永远不会手动调用initialize方法。当您调用Cat.new("Tiger")并将参数传递给它时,它会自动运行。

答案 1 :(得分:2)

你的代码在几个地方都错了。

  1. 您应该将方法名称从initilize更改为initialize
  2. 您应该Cat.new.initilize("Tiger")来创建对象,而不是Cat.new("Tiger")
  3. 代码更改后,您将获得所需的结果。

        animals = [Cat.new("Tiger"), Dog.new("Ginger"), Cow.new("Gretta"), Sheep.new("Sally")]
    
        animals.each {|x| puts x.talk}
    

    将给出

    Meow!

    Woof!

    Moo!

    Bahhhh