来自Neo Koans => object.nil?或对象==无

时间:2014-10-31 14:36:40

标签: ruby

我重新审视了红宝石,我看到了类似

的东西
 # THINK ABOUT IT:¬                                                                              
 30     #¬                                                                                              
 31     # Is it better to use¬                                                                          
 32     #    obj.nil?¬                                                                                  
 33     # or¬                                                                                           
 34     #    obj == nil¬                                                                                
 35     # Why?

真的更好吗?

我站在obj.nil的一边,因为它更容易阅读和更短。但是,有更好的证据表明哪个更好?

2 个答案:

答案 0 :(得分:3)

obj.nil?更具可读性和效率

require 'benchmark'

n = 500000
Benchmark.bm do |x|
  x.report { n.times do ; 1.nil?;   end }
  x.report { n.times do ; 1 == nil; end }
end

#     user     system      total        real
# 0.050000   0.000000   0.050000 (  0.056285)
# 0.100000   0.000000   0.100000 (  0.094164)

答案 1 :(得分:1)

obj.nil?也更容易修改。您可以覆盖它而不会使用更通用的==方法。 A可以使用Null Object Pattern,用户也可以使用nil?直接测试nil。