1

から以下のエラーが発生していますreek:

lib/actions.rb -- 5 warnings:
  Actions#move_forward calls (self.x_coordinate + unit) twice (DuplicateMethodCall)
  Actions#move_forward calls place((self.x_coordinate + unit), self.y_coordinate, self.direction) twice (DuplicateMethodCall)
  Actions#move_forward calls self.direction 5 times (DuplicateMethodCall)
  Actions#move_forward calls self.x_coordinate 4 times (DuplicateMethodCall)
  Actions#move_forward calls self.y_coordinate 4 times (DuplicateMethodCall)

以下はメソッド move_forward です

def move_forward(unit = 1)
        case self.direction
        when Direction::SOUTH
            place(self.x_coordinate, self.y_coordinate - unit, self.direction)
        when Direction::EAST
            place(self.x_coordinate + unit, self.y_coordinate, self.direction)
        when Direction::NORTH
            place(self.x_coordinate, self.y_coordinate + unit, self.direction)
        when Direction::WEST
            place(self.x_coordinate - unit, self.y_coordinate, self.direction)
        else

        end
    end

すべてのエラー、特に重複したメソッド呼び出しを削除したい。この場合、すべての警告を修正する最善の方法は何でしょうか?

4

3 に答える 3

2

オブジェクト指向の力を使っていないようです

代わりに、既存のオブジェクトの力を利用するソリューションはどうでしょうか?

def move_forward(by_how_much = 1) 
  move_relative(*direction.change_in_coords(by_how_much))
end

def move_relative(delta_x, delta_y)
  place( x_coordinate + delta_x, y_coordinate + delta_y, direction )
end

class Direction::SOUTH
  def self.change_in_coords(unit = 1)
    [0, -unit]
  end
end
于 2013-10-04T07:11:47.150 に答える
2

たぶん、このようなものですか?

def move_forward(unit = 1)
  x, y, d = x_coordinate, y_coordinate, direction
  case d
  when Direction::SOUTH
    place(x, y - unit, d)
  when Direction::EAST, Direction::WEST
    place(x + unit, y, d)
  when Direction::NORTH
    place(x, y + unit, d)
  else
  end
end

への「重複した呼び出し」self.x_coordindateself.y_coordinateちょっとした誤検知についての苦情を見つけましたが、それらはパスごとに 1 回だけ呼び出されます。

于 2013-08-26T22:51:29.577 に答える