Как насчет этого:
class Robot
FACINGS = [:south, :east, :north, :west]
def initialize(attr = {})
@facing_index = 0 # south
end
def facing
FACINGS[@facing_index]
end
def turn_left
@facing_index += 1
@facing_index %= 4
end
def turn_right
@facing_index -= 1
@facing_index %= 4
end
end
%= 4
(или, если вы действительно хотите обобщить это, %= FACINGS.length
) выполняет арифметику по модулю, чтобы "обернуть" текущий индекс обратно в диапазон 0-3.
Поэтому, увеличивая / уменьшая это число, вы можете переключаться между четырьмя направлениями.
Я не знаю, как вы собираетесь реализовать position
, move
и errors
, но я предполагаю, что это выходит за рамки вашего вопроса.