使用安全的导航操作员后增加时间

时间:2018-06-22 17:41:01

标签: ruby-on-rails ruby

我有一个名为event的对象。属性之一是updated_at,即date time。我想在updated_at上增加15秒的时间来处理我正在进行的测试。

event.updated_at + 15.seconds

起作用

测试时,有时eventnil。因此,我使用安全导航器&.处理了该问题。但是,由于无法在安全导航器运算符之后链接普通方法调用,因此我现在无法添加秒数。

所以这event&.updated_at + 15.seconds

不起作用

有人知道我在使用安全的导航仪后如何增加时间吗?

我想我能做

if event
  event.updated_at + 15.seconds
end

但是正在寻找更好的方法

1 个答案:

答案 0 :(得分:1)

您可以根据自己的喜好使用几种不同的方法。但是让我们对它们进行基准测试!

n = 10_000_000

Benchmark.bm do |test|
  test.report('if:')       { n.times { nil.updated_at + 15.seconds if nil } }
  test.report('unless:')   { n.times { nil.updated_at + 15.seconds unless nil.nil? } }
  test.report('& + send:') { n.times { nil&.updated_at&.send(:+, 15.seconds) } }
  test.report('& + try:')  { n.times { nil&.updated_at.try(:+, 15.seconds) } }  
end  

#              user       system     total        real
# if:        0.390000    0.000000   0.390000   (0.392020)
# unless:    0.570000    0.000000   0.570000   (0.569032)
# & + send:  0.380000    0.000000   0.380000   (0.381654)
# & + try:   13.950000   0.000000  13.950000   (13.959887)

结果以秒为单位。因此,请选择最快或最有吸引力的方法:)