Я работаю над проектом Ruby для школы и, к сожалению, не смог найти ответ на этот вопрос в своей литературе.
У меня есть множество кемпингов, в каждом из которых есть гость. Я инициализирую лоты так:
lots = Array.new
for i in (1..36)
lots[i] = Lot.new(i)
end
Далее я создаю Guest
объект, инициализирую его, и теперь я хочу добавить Guest
к моему Lot
. Метод в классе Lot
выглядит так:
def AddGuest(guest)
@guest = guest
end
Проблема возникает, когда я хочу вызвать метод, поскольку Lot
находится в Array
.
lots[lotnumber].AddGuest(guest)
Этот вызов дает мне ошибку:
undefined method `+@' for #<Guest:0x2c1ff14> (NoMethodError)
Я использовал require, чтобы классы знали друг о друге. Мне было довольно трудно понять Ruby, может ли моя ошибка заключаться в том, что я пытаюсь получить доступ к методу AddGuest
в классе Array
? Я привык делать такие вещи в C ++.
Ниже приведен полный источник (по крайней мере, соответствующие части).
Весь Lot
класс:
class Lot
def initialize(number)
@gauge = rand(2000) + 2000
@number = number
@guest = false
end
def Occupied()
return @guest
end
def AddGuest(guest)
@guest = guest
end
def RemoveGuest()
@guest = false
end
end
Части main.rb
#includes
require 'guest'
require 'lot'
#initiate comparison variables
userInput = "0"
numberOfGuests = 0
foundLot = false
guests = Array.new
lots = Array.new
#initialize lot list
for i in (1..36)
lots[i] = Lot.new(i)
end
Игрок не указал
#make sure lot is not taken
while foundLot == false do
lotnumber = rand(35)+1
if lots[lotnumber].Occupied() == false then
foundLot = "true"
end
end
foundLot = false
guest = Guest.new(firstName, lastName, adress, phone, arrival, lotnumber)
guests.insert(numberOfGuests, guest)
numberOfGuests++
lots[lotnumber].AddGuest(guest) #this is where error hits
end
end
end