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