2

如何DuplicateMethodCall从以下电话中纠正臭味

def to_str
    foo.blank? ? 'Value' : foo
end 

我应该如何处理 params[:some] 我应该单独声明它。

if params[:some] == 'Action1'

elsif params[:some] == 'Action2'

elsif params[:some] == 'Action3'

elsif params[:some] == 'Action4'

end
4

1 回答 1

0

对于使用 params 哈希的代码,您应该认识到它params[:some]params.[](:some). 因此,Reek 假设您:[]在对象 ( ) 上重复调用相同的方法 ( params)。

在 params 哈希的情况下,这个警告看起来有点傻,因为哈希键查找非常快。但是,要更正此问题,您可以将params[:some]值分配给局部变量:

some = params[:some]

if some == 'Action1'

elsif some == 'Action2'

elsif some == 'Action3'

elsif some == 'Action4'

尽管性能提升很小,但此代码(可以说)更具可读性且更易于维护。

请记住,虽然简单地修复报告的问题是有帮助的,但代码度量的真正威力在于它们将您集中在代码中的问题区域,让您有机会重新考虑您的方法。消除或重构代码异味比仅仅修补它以平息代码指标投诉要好。

于 2013-11-19T12:31:43.903 回答