【发布时间】:2012-01-14 23:18:31
【问题描述】:
我正在尝试消除我的代码中的重复。我有一个用跳棋填充棋盘的方法:
def populate_checkers
evens = [0, 2, 4, 6]
odds = [1, 3, 5, 7]
0.upto(2) do |x_coord|
if x_coord.even?
evens.each do |y_coord|
red_checker = Checker.new(x_coord, y_coord, :red)
@board[x_coord][y_coord] = red_checker
end
elsif x_coord.odd?
odds.each do |y_coord|
red_checker = Checker.new(x_coord, y_coord, :red)
@board[x_coord][y_coord] = red_checker
end
end
end
5.upto(7) do |x_coord|
if x_coord.even?
evens.each do |y_coord|
black_checker = Checker.new(x_coord, y_coord, :black)
@board[x_coord][y_coord] = black_checker
end
elsif x_coord.odd?
odds.each do |y_coord|
black_checker = Checker.new(x_coord, y_coord, :black)
@board[x_coord][y_coord] = black_checker
end
end
end
end
如何删除重复并仍然获得我需要的精确行为?
【问题讨论】:
-
旁注:从函数式编程的角度来看,这种代码非常非常糟糕。您调用一个方法并“神奇地”填充了一些实例变量(@board),唉,参考透明度正在走下坡路。更好地编写获取参数并返回某些内容的方法:
@board = build_board。更多关于 Ruby 的 FP:slideshare.net/tokland/functional-programming-with-ruby-9975242
标签: ruby refactoring iteration