pattern:将未经检查的对象作为ruby方法的默认参数传递

时间:2012-05-23 09:52:33

标签: ruby refactoring

我正在重构一些代码,我找到了像

这样的东西

编辑

设置是存储在我的数据库中的哈希。所以想象一下键 - >值结构存储在数据库中。因此,如果它不可访问,它将生成异常

def MyClass

 def my_method(foo = Settings[:foobar]
   foo
 end

 def your_method
   my_method
 end

我觉得它不安全,因为没有检查Settings [:foobar]是否存在。我的问题是:

写它会更安全吗:

def MyClass
   def my_method(foo)
     foo unless foo.nil?
   end
   def your_method
       my_var = Settings[:foobar] rescue "default value"
       my_method my_var
   end
end

如果没有,还有其他好的选择吗?

1 个答案:

答案 0 :(得分:0)

如果Settings是哈希值,那么Settings[:foo]将返回nil。所以foo unless foo.nil?做同样的事情。

另一种方法是使用||=方法。

def method(foo)
   foo ||= Settings[:foo]
   ...
end

但是我没有看到它比你拥有的更好的原因......

def method(foo)
   foo ||= Settings[:foo] || "my really default default"
   ...
end

...除非您在设置缺失时想要默认使用其他值,否则您可以执行此类操作。

抓住那个......不管怎么说都没有阻止你这样做......

def method(foo = Settings[:foo])
   foo ||= "my really default default"
   ...
end

希望这会有所帮助。