为什么我的第二课不允许我从头等课程调用我的方法?

时间:2014-07-26 21:11:23

标签: ruby class inheritance methods

我正在创建一个代码,用于在我的终端上运行一定距离的4匹马的小游戏。我有它输出我已经添加的马和我的用户马的地方,但是当我去下一堂课自己建立比赛时,我不断得到方法未定义的错误。我搜索了类似的东西但找不到任何东西。 learningruby.com有一些迂回的答案,但没有告诉我什么是我失踪。     马匹

  @@list_of_horses = []

  attr_accessor :name
  attr_accessor :position

  def initialize
    self.name = nil
    self.position = 0
  end

  def self.add_horse(*horse_variables)
    horse = Horses.new

    horse.name = horse_variables[0]

    @@list_of_horses.push horse
  end

  def self.add_user(*user_variables)
    add_user = Horses.new
    add_user.name = user_variables[0]

    @@list_of_horses.push add_user
  end


  def self.display_data
    puts "*" * 60
    @@list_of_horses.each do |racer|
        print "-" * racer.position
        puts racer.name
                           end
  end

  def move_forward
    self.position += rand(1..5)
  end


  def self.display_horses
    @@list_of_horses
  end
end


horse1 = Horses.add_horse ("Jackrabbit")
horse2 = Horses.add_horse ("Pokey")
horse3 = Horses.add_horse ("Snips")
user1 = Horses.add_user ("Jim")

Horses.display_data

现在当我运行这个文件时,它会在我的

终端给我打印输出

贾卡拉比特

波基

零星消息

吉姆

但是当我开始尝试在我的下一个Race类中调用我在Horses类中创建的方法时,甚至在Race类本身之外,我返回方法未定义。

require_relative 'Horses_class.rb'

no_winner = true

class Race 

      def begin_race
    puts "And the Race has begun!"
  end


end

while no_winner == true
puts begin_race
racing = Race.new
racing.Horses.display_data


end

那么为什么我不允许调用我的其他方法呢?我应该使用splat还是有更简单的东西,我会失踪?先谢谢你。

吉姆

1 个答案:

答案 0 :(得分:0)

您的begin_race方法在您调用它时似乎超出了范围。您需要使用.::(范围)运算符来访问它。

class Race
    def self.begin_race
        puts "And the race has begun!"
    end
end

Race::begin_race
# or
Race.begin_race

此外,当您致电racing.Horses.display_data时,您必须确保您的Horses班级是您racing班级的子班级。您可以通过对象调用子类,您必须通过类常量调用它。

class Race
    class Horses
        def self.display_data
            puts "The Data"
        end
    end
end

# Access 'display_data'
Race::Horses.display_data

因此,在这种情况下,您的require_relativeRace课程中,而您的while广告块应该是

while no_winner == true
    Race.begin_race
    Race::Horses.display_data
end