在Perl中,爲什麼有單獨的字符串比較運算符(eq
,ne
)與數值比較(==
,!=
)?爲什麼使用兩組獨立的運算符而不是使用單個運算符進行字符串和數字比較?爲什麼Perl有單獨的運算符來測試字符串相等和數字相等?
回答
只要感覺自己需要評估表達式,Perl就會自動進行類型轉換。這需要兩個操作員,以便程序員可以字符串和數值比較區分:
print "eq" if "02" eq "2"; # string comparison -- no output
print "==" if "02" == "2"; # numeric comparison -- will print "=="
上面從this thread on PerlMonks服用。下面是該線程的一些其他信息:
- 一個原因使用
==
而非eq
是這樣,如果你想到哪裏了一些東西非數值使用,你可以得到警告。 - 使用
eq
而不是==
的一個原因是字符串轉換會丟失小數點後的位數,因此您會因浮點舍入錯誤而導致虛假的不等式。 - 考慮編寫
2 == $val
而不是$val == 2
。它看起來很奇怪,但這種方式=
而不是==
常見的拼寫錯誤會給你一個立即編譯錯誤,而不是一個討厭的錯誤。
字符串轉換不會丟失小數位,它們會丟失部分小數位。 – ysth 2014-10-06 16:20:00
(例如,一個53位有效數的64位浮點數可以存儲數字,精度爲15.9位十進制數字,但我們將它串聯到15位十進制數) – ysth 2014-10-06 16:25:18
[警告會在它成爲一個討厭的錯誤之前捕獲到最後一個情況] (https://eval.in/202162),但這是將運行時警告轉換爲編譯時錯誤的一種巧妙方式(代價是稍微少一點的解釋性錯誤消息,其中[省略了錯誤中最顯着的部分] (https://eval.in/202163)('2 =')。 – Slade 2014-10-06 17:15:16
- 1. 爲什麼兩個相同的字符串測試不等?
- 2. 爲什麼字符串不相等?
- 3. Perl字符串怪異:等於字符串不相等?
- 4. 測試字符串相等問題
- 5. 相等的字符串不相等?
- 6. 爲什麼字符串和數字有單獨的比較函數/運算符?
- 7. 爲Ruby字符串或符號測試字符串相等(不是對象相等)的最簡潔方法?
- 8. 顯示相同的Ruby字符串不相等,爲什麼?
- 9. 爲什麼非ASCII字符不相等?
- 10. 查找所有「字符相等」字符串的高效算法?
- 11. 爲什麼我的字符串不等於單個字符的測試工作?
- 12. 字符串不相等
- 13. Javascript/PHP字符串相等
- 14. NSOrderedDescending而不是NSOrderedSame爲相等的字符串,爲什麼?
- 15. 相同的字符串但不相等 - 發生了什麼?
- 16. 爲什麼這些字符串被評估爲不相等?
- 17. StringBuilder和字符串相等性檢查
- 18. python-字符串相等和ord()比較?
- 19. 爲什麼字符串不能與存儲的varchar相等?
- 20. 爲什麼兩個相同的字符串不等於?
- 21. 爲什麼我的字符串不相等?
- 22. 爲什麼我的字符串不相等?
- 23. 如何計算兩個字符串之間的相等字數?
- 24. 字符串相等構建從字符數組字符串或串接字符
- 25. Clojure:字符文字相等
- 26. 這些字符串爲什麼不相等?
- 27. 爲什麼這些字符串不相等? (Python)
- 28. 爲什麼兩個空字符串切片不能「相等」?
- 29. 爲什麼這些字符串不相等?
- 30. 爲什麼Date會像其他算術運算符一樣使用+和相似數字來處理字符串?
它有這些運算符,所以它不需要用'==='和'!=='操作符重新發明輪子,這btw不能很好地解決比較問題。 – 2014-10-06 15:12:39
由於數字和字符串比較是不同的操作,因此Perl有不同的數字和字符串比較運算符。更好地問,爲什麼許多其他語言使用一個運算符來處理不同的事情,即使是那些沒有類型系統的運算符也會使它毫不含糊? – hobbs 2014-10-06 15:12:48
簡短回答:**因爲Perl不知道某個值是否爲數字**對Perl來說,數字值'2'可以像存儲爲一個有符號整數的字符串一樣容易地存儲爲字符串。 – ikegami 2014-10-06 15:22:13