重构Ruby:将字符串数组转换为int数组

时间:2011-10-25 16:18:22

标签: ruby rspec

我正在重构一个跳棋程序,我正在尝试将玩家移动请求(例如“3,3,5,5”的形式)处理成一个int数组。我有以下方法,但它不像我所知的那样感觉像Ruby一样:

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 

测试通过,但我认为代码非常难看。任何帮助,将不胜感激。感谢。

史蒂夫

1 个答案:

答案 0 :(得分:22)

您可以通过地图操作替换each的显式迭代:

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

@tokland提出的更简洁的写作方式是:

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

它避免显式编写一个块,并选择像x这样的变量名,这个名称和任何名称都不相关。

请查看stackoverflow帖子What does to_proc method mean?