【发布时间】:2009-07-13 20:20:07
【问题描述】:
我正在为学校开展一个 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,我的错误可能是我尝试访问 Array 类中的 AddGuest 方法吗?我习惯用 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
【问题讨论】:
-
你能发布完整的源代码吗? AddGuest 方法是否定义在类的范围内?
-
您是否可能不小心将 AddGuest 置于私有或受保护状态?
-
仅供参考,您可以更简洁地创建地段为
lots = (1..36).collect {|n| Lot.new n}。 Ruby 消除了很多显式循环。