我已经看到带有默认参数的特殊代码气味。那是当一个方法为其参数之一设置了默认值但调用者通过nil
而不是不传递任何值。在大多数情况下,这是因为调用者有一个散列并且它试图从散列中传递一个特定的值。具体来说:
def foo(params)
...
bar(params[:first], params[:second]) # :second doesn't exist
end
def bar(first, second = 2)
end
第二个参数 tofoo
不会成为默认值,而是变成nil
. 我见过的最常见的处理方式是功能栏中的第一行是:
second ||= 2
有没有更好的方法来处理这个?也就是说,无论何时nil
或没有参数被传递,分配一个默认值。