【发布时间】:2017-02-26 22:58:33
【问题描述】:
我对 Ruby 还是很陌生,但我在完成一个我试图解决的练习时遇到了麻烦。这是一款经典的房间游戏,经过一番混乱后,我想出了一个对我来说看起来不错的代码 - 减去它不起作用。
我正在尝试从类中的另一个方法中调用 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
【问题讨论】: