2013-04-13 50 views
69

我想在Ruby中有條件地設置變量。如果變量爲零或空(0長度字符串),我需要設置它。我想出了以下幾點:空或無值字符串測試

variable = id if variable.nil? || (!variable.nil? && variable.empty?) 

雖然它的工作,它似乎並不像我很喜歡Ruby。表達上述的更簡潔的方式嗎?

+0

的「紅寶石辦法」將不會進入狀態,你必須尼爾斯和空的混合物字符串。如果無論返回哪個函數,都會返回一個「空」值,它應該返回'nil',而不是'「」'。 – meagar

回答

140

第二個子句不需要!variable.nil?檢查評估是否達到該點,variable.nil保證爲假(因爲short-circuiting)。

這應該是足夠了:

variable = id if variable.nil? || variable.empty? 

如果你使用Ruby on Rails的工作,Object.blank?解決了這個確切的問題:

一個目的是空白的,如果它是假的,空,或者一個空白字符串。例如,""," ",nil,[]{}都是空白的。

+4

完美,這就是我所需要的('Object.blank')。 Ruby和Rails總是讓我感到驚訝,它像禪宗一樣簡單。謝謝! :) –

+0

此解決方案不適用於'variable = 3 p variable = 5 if variable.nil? || variable.empty?' –

+1

這假設@RichardBrown不會在他期望成爲字符串變量的地方插入一個整數,是的。 –

15
variable = id if variable.to_s.empty? 
40

如果你在Rails.blank?應該是你正在尋找的方法:

a = nil 
b = [] 
c = "" 

a.blank? #=> true 
b.blank? #=> true 
c.blank? #=> true 

d = "1" 
e = ["1"] 

d.blank? #=> false 
e.blank? #=> false 

所以答案應該是:

variable = id if variable.blank?