Ich bin ganz neu in Ruby und ich habe Probleme, eine Übung Finishing ich zu lösen versuchen. Es ist ein klassisches Game of Rooms, und nachdem ich ein bisschen durcheinander gekommen bin, habe ich einen Code entwickelt, der mir gut aussieht - minus, das funktioniert nicht.private Methode `wählt‘ genannt für # <Zimmer: 0x00000001f6f5f8> (NoMethodError)
Ich versuche, die Select-Methode innerhalb einer anderen Methode in einer Klasse aufrufen, auf was ich ziemlich sicher bin, ist es ein Array (@position), aber ich bekomme die obige Fehlermeldung.
Hier ist eine Probe von meinem Code, eine Idee auf, warum das .select privat ist willkommen!
class GameofRooms
attr_accessor :position
def initialize
@rooms = [
Room.new("Red",{"s" => "Green", "e" => "Blue"},"it's a red room"),
Room.new("Blue",{"w" => "Red", "e" => "Patio", "s" => "Yellow"},"it's a blue room"),
Room.new("Yellow",{"e" => "Patio", "n" => "Blue", "w" => "Green"},"it's a yellow room"),
Room.new("Green",{"n" => "Red", "e" => "Yellow"},"it's a green room"),
Room.new("Patio",{"s" => "Green", "w" => "Blue"},"lovely garden")
]
@position = @rooms[0]
end
def get_input_move
puts "Where would you like to go?"
@input = gets.chomp
if @position.exits.key?(@input)
roomName = @position.exits[@input]
room = @position.select {|selectedRoom| selectedRoom.name == roomName }
self.class.move(room)
elsif
puts "You can't go in that direction"
end
end
def self.move(room)
@position = room
@position.each do |room|
puts "You have entered the #{name} room. #{text}"
end
end
end
class Room
attr_accessor :name, :exits, :text
def initialize(name,exits,text="")
@name = name
@exits = exits
@text = text
end
end
round = GameofRooms.new
round.get_input_move