我正在创建一个代码,用于在我的终端上运行一定距离的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还是有更简单的东西,我会失踪?先谢谢你。
吉姆
答案 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_relative
应在的Race
课程中,而您的while
广告块应该是
while no_winner == true
Race.begin_race
Race::Horses.display_data
end