Ruby 重构方法

Ruby 重构方法,ruby,Ruby,我已经构建了一个Tic-Tac-Toe游戏,并希望将两个类似的方法重构为一个 def computer_offense(brd, square='') WINNING_LINES.each do |line| square = find_at_risk_square(line, brd, COMPUTER_MARKERR) break if square end square end def computer_defense(brd, square) WINNI

我已经构建了一个Tic-Tac-Toe游戏,并希望将两个类似的方法重构为一个

def computer_offense(brd, square='')
  WINNING_LINES.each do |line|
    square = find_at_risk_square(line, brd, COMPUTER_MARKERR)
    break if square
  end
  square
end

def computer_defense(brd, square)
  WINNING_LINES.each do |line|
    square = find_at_risk_square(line, brd, PLAYER_MARKER)
    break if square
  end
  square
end

您可以像这样重构:

def computer_offense_or_defense(brd, square='', offense=true)
  WINNING_LINES.each do |line|
    square = find_at_risk_square(line, brd, offense ? COMPUTER_MARKERR : PLAYER_MARKER)
    break if square
  end
  square
end
因此,以前称为“计算机进攻”的地方现在可以称为“计算机进攻”或“防御”(brd,square,true) 对于电脑防御你可以打电话

computer_offense_or_defense(brd, square,false)

你可以像这样重构它

def computer_offense(brd, square='')
  get_square(brd, square, COMPUTER_MARKERR)
end

def computer_defense(brd, square)
  get_square(brd, square, PLAYER_MARKER)
end

def get_square(brd, square, marker)
  WINNING_LINES.each do |line|
    break if square = find_at_risk_square(line, brd, marker)
  end
  square
end

这个问题应该转移到codereview网络谢谢,我以后会这样做的。谢谢。看起来很简单,但我没能做到。