2
A
回答
1
虽然这两个操作是非常不同的我很确定他们总是会产生相同的结果。 (一种叫做NilClass对象的#nil?
方法,另一种叫做nil
单身人士。)
我会建议,如果有人怀疑你走第三条路,实际上只是测试表达式的真值。
所以,if x
和不if x == nil
或if x.nil?
,为了具有该测试DTRT当表情值假。
2
有一个区别:一个类可能定义零?是真的:
class X
def nil?()
true
end
end
puts X.new.nil? #-> true
还是一个实际的例子(我不推荐它,如果你需要的话,我会定义一个nil_or_empty?):
class String
def nil?()
return empty?
end
end
puts 'aa'.nil? #-> false
puts ''.nil? #-> true
运行基准为零?似乎要快一点。
require 'benchmark'
TEST_LOOPS = 100_000_000
C_A = nil
C_B = 'aa'
Benchmark.bmbm(10) {|b|
b.report('nil?') {
TEST_LOOPS.times {
x = C_A.nil?
x = C_B.nil?
} #Testloops
}
b.report('==nil') {
TEST_LOOPS.times {
x = (C_A == nil)
x = (C_B == nil)
} #Testloops
} #b.report
} #Benchmark
结果:
Rehearsal ---------------------------------------------
nil? 27.454000 0.000000 27.454000 (27.531250)
==nil 31.000000 0.000000 31.000000 (31.078125)
----------------------------------- total: 58.454000sec
user system total real
nil? 27.515000 0.000000 27.515000 (27.546875)
==nil 31.125000 0.000000 31.125000 (31.171875)
相关问题
- 1. Apache与红宝石 - 宝石问题
- 2. 红宝石mysql2宝石安装问题
- 3. 红宝石问题(bug) - 在耙宝石
- 4. 红宝石宝石问题与升级
- 5. class_eval问题红宝石
- 6. 红宝石环路问题
- 7. 红宝石递归问题
- 8. 红宝石编码问题
- 9. 红宝石和Netbeans问题
- 10. 红宝石当零或空字符串
- 11. 红宝石分割问题
- 12. 红宝石googlecharts问题
- 13. 问题秀红宝石鞋
- 14. 红宝石安装问题
- 15. 红宝石PROC问题
- 16. 问题在红宝石
- 17. 红宝石环路问题
- 18. 红宝石 - 方法问题
- 19. 红宝石安装问题
- 20. 红宝石命名问题
- 21. 红宝石插座问题
- 22. 红宝石设计问题
- 23. 红宝石问题与class_eval
- 24. 红宝石环路问题
- 25. 红宝石 - 乘法问题
- 26. 红宝石:网:: HTTP.start问题
- 27. 红宝石语法问题
- 28. 红宝石递归问题
- 29. 红宝石滤波问题
- 30. 问题与红宝石
这可能是一个非常糟糕的主意重新实现''为零,因为它会导致各种混乱的? – tadman
你可以重新实现'=='(和相关的方法),这样'X.new == nil'返回true。 –
你是对的 - ruby总是比预期的更灵活;) – knut