Ruby - 对数组中对象的方法调用

Tob*_*bbe 2 ruby arrays

我正在为一所学校的Ruby项目工作,遗憾的是在我的文献中找不到这个问题的答案.

我有一系列露营地,每个露营地都有一位客人.我初始化这样的地段:

lots = Array.new

for i in (1..36)
  lots[i] = Lot.new(i)
end
Run Code Online (Sandbox Code Playgroud)

再往下我创建一个Guest对象,初始化它,现在我想添加Guest到我的Lot.该类中的方法Lot如下所示:

def AddGuest(guest)
  @guest = guest
end
Run Code Online (Sandbox Code Playgroud)

当我想调用方法时,问题出现LotArray.

lots[lotnumber].AddGuest(guest)
Run Code Online (Sandbox Code Playgroud)

这个电话给我错误:

undefined method `+@' for #<Guest:0x2c1ff14> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我使用过需要,所以课程彼此了解.我很难理解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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

播放器输入省略

#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
Run Code Online (Sandbox Code Playgroud)

tad*_*man 6

该错误似乎与您使用++运算符有关,这在C++中很自然地得到支持,但在Ruby中不受支持.

相当于:

numberOfGuests += 1
Run Code Online (Sandbox Code Playgroud)