2013-07-01 39 views
7

我想有這樣的測試:紅寶石:空白?沒有Rails的

if (line.blank?) do_stuff 

...但我在直紅寶石,沒有欄杆。達到同樣效果的公認成語是什麼?

我正在做這個字符串,在那裏測試.empty?與測試.blank不一樣嗎? (所有空格字符串不爲空,但爲空。)

+1

看看源代碼。 https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/blank.rb – Kyle

+0

謝謝,凱爾。在String下找到它。你介意在下面添加這個答案,所以我可以接受它嗎? (不幸的是,到目前爲止提供的兩個答案都不正確,在字符串的上下文中,所有空白的行仍然被測試爲非空。)rails定義只是:def blank? self!〜/ [^ [:space:]]/ end – baudot

回答

7

ActiveSupport

line !~ /[^[:space:]]/ 
+1

'/ [^ [:space:]] /'與\/S /'不同嗎?我想知道爲什麼Rails使用前一種方式來做到這一點。 – sawa

+0

@sawa [docs](http://www.ruby-doc.org/core-1.9.3/Regexp.html)提及它,包括檢查製表符的'[:blank:]''。它還包含對換行符和回車的檢查。也許這就是爲什麼。 – Kyle

+0

'/ \ s /'是一樣的。 – sawa

1

blank?本質上只是檢查empty? || nil?。所以你可以自己做空白方法,或者在你的條件中檢查它們。

1
if line.empty? || line.nil? 

您可以在空白的包裝呢?方法在

4

這是可能的:

line.to_s.strip.empty? 
+0

最佳答案,適用於所有情況 – athospy

8

blank?不僅在字符串定義,它也是無的一部分,因爲它是一個雙重測試。它會檢查變量是否爲nil?empty? /空格。

如果因爲沒有nil?方法而無法提供字符串,但您可以詢問Nil是否爲nil?

有效支持有核心擴展可用,這讓我們挑選所需的功能,幷包括必要的方法。對於blank?你可以這樣做:

require 'active_support/core_ext/object/blank' 

blank?更多的信息和閱讀全文,看到的是可用什麼。通過這種方式使用Active Support可以消除加載所有AS的需求,但可以獲得有用的功能。