gpt4 book ai didi

ruby - Reek codesmell 重复方法调用修复

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:37 26 4
gpt4 key购买 nike

我从 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

我想删除所有错误,尤其是重复的方法调用。在这种情况下,修复所有警告的最佳方法是什么?

最佳答案

触发 reek 报告的代码“味道”是您正在调用一个设置多个实例变量状态的方法,而实际上变化很少(例如方向不根本改变)。 place 方法设置所有内容,这使得使用它进行小的更改过于冗长。

这可能会降低该方法的影响,从而减少报告的问题:

def move_forward(unit = 1)
case direction
when Direction::SOUTH
move_relative( 0, -unit )
when Direction::EAST
move_relative( unit, 0 )
when Direction::WEST
move_relative( -unit, 0 )
when Direction::NORTH
move_relative( 0, unit )
end
end

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

(我也忍不住“修复”你的 WEST 运动,如果那真的是错误的,抱歉)

关于ruby - Reek codesmell 重复方法调用修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com