Ruby:如果date为nil,请不要在date.strftime()上引发错误

时间:2014-10-17 14:18:13

标签: ruby-on-rails ruby null

有一种情况,我在nil调用方法时不同意提出错误。

这是Datetime.strftime方法。实际上,它应该将Datetime对象格式化为字符串。

然后有理由

datetime = Time.now
datetime.strftime('%d-%m-%Y') # => '17-10-2014'
datetime = nil 
datetime.strftime('%d-%m-%Y') # => ''

相反,我总是需要写:

datetime.strftime('%d-%m-%Y') if datetime

这是一种痛苦。

我理解在nil上调用一个方法可能会导致许多意外行为,因此需要中断,但在这种情况下,我没有看到太多危险。无论如何都会返回一个字符串,结果是相当逻辑的:(empty_date).to_s => empty_string。

我可以避免这种行为吗?

3 个答案:

答案 0 :(得分:3)

我不同意你的意见。

在无保护的代码中,具有调用它的方法的nil值几乎总是正常程序流的异常,或者是未经充分验证的条件。

我不明白为什么你的特定案例应被视为例外。你的值是零,你试图调用一个不存在的方法。 QED。

答案 1 :(得分:1)

在 6 年后的 Rails 上下文中,我将使用 try 方法,它使用这种方式:

datetime = Time.now
datetime.try(:strftime, '%d-%m-%Y') # => '25-02-2021'
datetime = nil 
datetime.try(:strftime, '%d-%m-%Y') # => nil

答案 2 :(得分:0)

您可以在nil上定义strftime:

class NilClass
  def strftime(_)
    ''
  end
end

puts nil.strftime('whatever').inspect
=> ""