Я совершенно новый для Ruby, и у меня проблемы с выполнением упражнения, которое я пытаюсь решить. Это классическая игра из комнат, и после небольшого беспорядка я придумал код, который выглядел хорошо для меня - минус, что не работает.частный метод `select ', вызываемый для # <Room: 0x00000001f6f5f8> (NoMethodError)
Я пытаюсь вызвать метод select из другого метода в классе, насколько я уверен, что это массив (@position), но я получаю вышеуказанное сообщение об ошибке.
Вот пример моего кода, любая идея о том, почему .select является частным, будет рад!
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