私は学校向けのRubyプロジェクトで作業していますが、悲しいかなか私の文献でこの質問に対する答えを見つけることができませんでした。Ruby - 配列内のオブジェクトへのメソッド呼び出し
キャンプ用ロットの配列があり、それぞれにゲストが含まれています。私はこのような多くを初期化します。私はGuest
オブジェクトを作成し、それを初期化し、そして今、私は私のLot
にGuest
を追加したいダウン
lots = Array.new
for i in (1..36)
lots[i] = Lot.new(i)
end
さらなる。クラスLot
のメソッドは次のようになります。Lot
はArray
であるように私は、メソッドを呼び出したいとき
def AddGuest(guest)
@guest = guest
end
問題が来ます。
lots[lotnumber].AddGuest(guest)
この呼び出しは私にエラーを与える:私が使用している
undefined method `[email protected]' for #<Guest:0x2c1ff14> (NoMethodError)
が必要なので、クラスがお互いのことを知っています。私はRubyを理解するのに苦労しましたが、Array
クラスのAddGuest
メソッドにアクセスしようとするとエラーが発生する可能性がありますか?私はC++でこれを行うのに慣れています。
以下は完全なソースです(少なくとも関連する部分)。
全体Lot
クラス: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
プレーヤー入力の
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
部品は、一般的にRubyのメソッド名は大文字ではありません
#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をプライベートにしたり、保護したりする可能性はありますか? – Ori
ちょうど参考にして、ロットをより簡単に 'lots =(1..36).collect {| n | Lot.new n} 'を選択します。 Rubyは、明示的に多くのループを排除します。 – Chuck