我正在重构一个跳棋程序,我正在尝试将玩家移动请求(例如“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
测试通过,但我认为代码非常难看。任何帮助,将不胜感激。感谢。
史蒂夫
答案 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?