2013-01-19 20 views
10

我通常做使用||的Ruby/Rails確定值,使用零值的空字符串,而不是

value = input || "default" 

因此,如果輸入=零

value = "default" 

但我怎麼能做到這一點所以不是nil它還計算一個空字符串作爲''nil

我想,這樣如果我做

input = '' 
value = input || "default" 
=> "default" 

沒有if有沒有一個簡單而優雅的方式來做到這一點?

+0

請注意,您將問題標記爲'ruby-on-rails',因此Rails具體的答案。 –

+0

是的,我在軌道上運行,所以它沒有問題,我也標記紅寶石,因爲它看起來更像一個紅寶石問題 - 編輯標題以更好地匹配答案/問題 – Akshat

回答

30

Rails添加presence方法把所有objec牛逼但這正是你想要

input = '' 
value = input.presence || "default" 
=> "default" 

input = 'value' 
value = input.presence || "default" 
=> "value" 

input = nil 
value = input.presence || "default" 
=> "default" 
+1

是的,但它是_RAILS_ONLY_,'純'紅寶石沒有它。 –

+0

是的,這是Rails擴展,以及'空白?' – dimuch

3

我通常做的是這樣的:

value = input.blank? ? "default" : input 

在迴應的情況下輸入可能不被定義,可以通過保護它:

value = input || (input.blank? ? "default" : input) 
# I just tried that the parentheses are required, or else its return is incorrect 

對於純紅寶石(不依賴於Rails的),你可以使用empty?

value = input || (input.empty? ? "default" : input) 
value = (input ||= "").empty? ? "default" : input # thanks gg_s for providing this 
+0

,這很好! – Akshat

+0

我還有一個問題 - 如果我們有實際的輸入定義在某處,它會很好。但如果我們不這樣做呢?所以,我們得到的是'未定義的局部變量或方法'? –

+0

@DmitriyUgnichenko更新了答案,看看它是否回答你的問題:) – PeterWong

0

也許irrelavant但我會用高架像這樣的內容:

require "highline/import" 

input = ask('Input: ') { |q| q.default = "default" } 

它的工作原理沒有Rails的。真的很整潔的解決方案。

相關問題