我正在爲學校開發一個Ruby項目,並且很遺憾我的文獻中找不到這個問題的答案。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 `[email protected]' for #<Guest:0x2c1ff14> (NoMethodError)
我已經使用要求,因此類彼此瞭解。我很難理解Ruby,可能我的錯誤是我嘗試訪問Array
類中的AddGuest
方法?我習慣於在C++中做這樣的事情。
以下是完整的源代碼(至少相關部分)。
整套Lot
類:main.rb的的
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
零件
#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
您可以發佈完整的源代碼?是在類的範圍中定義的AddGuest方法? – 2009-07-13 20:25:39
是否有可能無意中將AddGuest置於私人或受保護的位置? – Ori 2009-07-13 20:46:59
僅供參考,您可以更簡潔地創建這些地段,作爲`lots =(1..36).collect {| n | Lot.new n}`。 Ruby消除了大量顯式循環。 – Chuck 2009-07-13 21:50:27