在Ruby中,空字符串""
與條件有關。我看到很多人都在爲這個事實而努力。 Ruby on Rails的blank?
是解決這個問題的一個嘗試。另一方面,當這樣的規範變得方便時,這並不明顯。是否有任何用例說明這個事實變得方便,否則會有理論上的問題?如果一個空字符串真的有什麼好處?
回答
我想我想出了答案。可能是出於理論上的原因和效率。在單個類的不同實例之間繪製線在理論上比在類之間繪製線更加複雜,並且需要更多計算。如果""
是有缺陷的,那麼Ruby內部每次在條件中存在字符串時都必須檢查字符串的長度。相反,如果真正的情況可以由班級來判斷,情況恰恰如此,那麼它會更有效率。也許這也是爲什麼false
和true
不包含在單個類別Boolean
下但分別屬於獨立類別的原因。
另一種可能性是,只有一個實例false
和nil
,因此在Ruby中內部處理只需要檢查指針/對象id,而字符串是可變的,並且需要更復雜的檢查空白。
減少考慮事項的數量falsey是件好事。它簡化了語言,簡化了布爾規則,使它們更易於記憶和應用,從而減少了錯誤。
試想一下,在混亂PHP是:false
,0
,0.0
,'0'
,''
,null
和array()
都falsey之後,每天都保持驚人的許多人。
如果要測試空字符串,請測試空字符串。您應該知道您的變量是否包含字符串或布爾值,並且能夠相應地進行測試。
你的觀點是,越好越有意義,但仍然聽起來有點虛弱。你能詳細說明在PHP中令人驚訝的是什麼? – sawa
呃,特別是'0'(0作爲一個字符串)是相當有爭議的。它不是一個空*字符串,但它被認爲是'false'。這似乎相當武斷。那麼爲什麼不「'false」(字符串「false」)呢?因爲這是一個*非空字符串*。所以規則是*非空字符串,除了''0'是假*。對於newbs而言,這是一個很難解釋和保留的問題,而'false'和'nil'是'假'的時期。在PHP中,你必須真正考慮像*這樣的函數可能返回一個空數組,我真的希望這意味着'false'嗎?*或者*可能這裏的輸入是'「0,並且這應該是'false '?* – deceze
但這裏的重點不是關於「false」或「0」。這是關於''「'的。 – sawa
我認爲Ruby被設計得很簡單,並且FEWER值爲false使得程序更易於推理:「只有兩個對象的布爾值爲false,這些是false對象本身和nil對象。」
這個折衷是你可能必須寫更.blank?
。另一方面,有多少個字段的最小長度爲1?不多。如果你正在檢查.size > 1
,那麼「空字符串真實」是沒有用的。
每種語言都選擇它是「範式」。例如,在SQL中,布爾操作實際上有3個值(true,false,null)。在Perl和C中,0
是錯誤的。哎呀,在某些語言中,字符串「false」是錯誤的。
你的答案太抽象了。如果越少越好,那麼爲什麼不僅有一個而是兩個虛假元素?爲什麼兩個人都可以,而不是三個? – sawa
- 1. 添加一個空字符串會帶來什麼好處嗎?
- 2. 用前導空格分隔字符串有什麼好處?
- 3. PLINQ有什麼真正的好處?
- 4. 什麼描述@property(.....)最好?那真的有什麼好處?
- 5. jQuery的.load()返回什麼,如果字符串有空格
- 6. 爲什麼每個字符串都有空字符串?
- 7. Ruby:空字符串和空字符串有什麼不同?
- 8. 使用字符串格式與字符串連接有什麼好處?
- 9. 我試圖做一個空白來檢查是否是真的,如果是的話,讓一個字符串說什麼取決於什麼是真
- 10. 爲什麼trim()返回一個空字符串,如果它接收到一個多行字符串(包含CR)?
- 11. 將JavaScript字符串映射到「常量」有什麼好處?
- 12. mysql:爲什麼比較一個'字符串'爲0是真的?
- 13. 什麼是建立一個字符串,如果我有字符和長度
- 14. 爲什麼accessible_attributes有一個空字符串?
- 15. 爲什麼只有一個空間分割字符串得到[ '', '']
- 16. 什麼是空字符串?
- 17. 爲什麼字符串EndsWith和StartsWith等於真正與字符串。空
- 18. 如果我strncat到沒有空終止符的字符串會發生什麼?
- 19. 爲什麼帶有空字符串的getResourceAsStream返回一個空的InputStream?
- 20. 不打印字符串,如果我有一個空列表
- 21. 爲什麼空語句ToString()返回一個空字符串?
- 22. 處理臨時字符串的更好方法是什麼?
- 23. 在Python中字符串格式化的好處是什麼?
- 24. 處理空/空字符串
- 25. 寫「?」在一個字符串中,如果一個屬性爲空
- 26. 一個襯裏如果字符串不爲空,否則空
- 27. 什麼是更有效的處理這個字符串
- 28. 什麼都要返回string.Split(「;」)如果字符串爲null或空
- 29. 爲什麼這個方法返回一個空字符串?
- 30. 驗證在PHP中的字符串,如果只有子字符串爲真
是否有任何使用情況下將''''視爲虛假變得方便?我認爲這更令人驚訝。 – meagar
任何人都會考慮使用'blank?'將會是一個用例。有很多。 – sawa
我認爲這個問題太寬泛,無法合理回答。你在問爲什麼做出語言設計決策。我可以爲您提供一個有效的用例,在這個用例中它變得非常方便,而且它不是那樣。 – Shoe