Рефакторинг Ruby: преобразование строкового массива в массив int - PullRequest
5 голосов
/ 25 октября 2011

Я выполняю рефакторинг программы проверки и пытаюсь обработать запрос игрока на перемещение (например, в форме «3, 3, 5, 5») в массив int. У меня есть следующий метод, но он не такой рубиновый, как я знаю, это может быть:

def translate_move_request_to_coordinates(move_request)
    return_array = []
    coords_array = move_request.chomp.split(',')
    coords_array.each_with_index do |i, x|
      return_array[x] = i.to_i
    end
    return_array
  end

У меня есть следующий тест RSpec с ним.

it "translates a move request string into an array of coordinates" do
      player_input = "3, 3, 5, 5"
      translated_array = @game.translate_move_request_to_coordinates(player_input)
      translated_array.should == [3, 3, 5, 5]
    end 

Тест пройден, но я думаю, что код довольно уродливый. Любая помощь будет оценена. Спасибо.

Steve

1 Ответ

22 голосов
/ 25 октября 2011

Вы можете заменить явную итерацию each на операцию карты:

move_request.chomp.split(',').map { |x| x.to_i }

Более краткий способ написать это, предложенный @tokland:

move_request.chomp.split(',').map(&:to_i)

Это позволяет избежать явной записи блока, а также выбора имени переменной, например x, которое не имеет значения, как любое другое имя.

Пожалуйста, ознакомьтесь с сообщением stackoverflow Что означает метод to_proc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...