2014-02-18 111 views
0

我經常遇到以下情況:我想設置一個變量,除非它存在。當然,這可以通過這樣做很容易做到:Ruby - 如果變量不存在,則返回默認值

var1 = "" 
var1 = "dhiughr" unless var1.present? 

如果是nil這可以用一個簡單的||=運營商來完成,但由於空字符串不nil將無法​​正常工作。我曾嘗試閱讀紅寶石或運營商,理論上應該工作:

var1 = "" or "dhiughr" 

但它沒有。我希望當第一個不是present時選擇第二個字符串(從操作員的右側)?

我在做什麼錯?

+0

爲什麼你認爲「'或'算子理論上應該工作」? –

+0

有沒有一種方法可以爲該表達獲得一個班輪? – Severin

+0

是的,看看我的答案。 –

回答

3

你能做到這樣,使用Object#presence方法(這是作爲擴展名從active_support庫):

var1 = var1.presence || 'dhiughr' 

它的工作原理如下:

var1 = '' 
var1 = var1.presence || 'dhiughr' 
var1 
# => "dhiughr" 
var1 = 'foo' 
var1 = var1.presence || 'dhiughr' 
var1 
# => "foo" 
+0

爲什麼他不使用'|| ='? – scaryguy

+0

@scaryguy仔細閱讀這個問題,你會得到答案。 –

+0

爲什麼我的答案被降低了? –

1

紅寶石空串是真值。見What's truthy and falsey in Ruby?

紅寶石:

var1 = '' 
var1 = var1.to_s == '' ? 'dhiughr' : var1 

使用Rails:

var1 = '' 
var1 = var1.blank? ? 'dhiughr' : var1 
相關問題