我有一个名为event
的对象。属性之一是updated_at
,即date time
。我想在updated_at
上增加15秒的时间来处理我正在进行的测试。
event.updated_at + 15.seconds
测试时,有时event
是nil
。因此,我使用安全导航器&.
处理了该问题。但是,由于无法在安全导航器运算符之后链接普通方法调用,因此我现在无法添加秒数。
所以这event&.updated_at + 15.seconds
有人知道我在使用安全的导航仪后如何增加时间吗?
我想我能做
if event
event.updated_at + 15.seconds
end
但是正在寻找更好的方法
答案 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)
结果以秒为单位。因此,请选择最快或最有吸引力的方法:)