在Rails的文檔,the example provided爲object.presence
方法是:object.presence的要點是什麼?
region = params[:state].presence || params[:country].presence || 'US'
但不是僅僅等同於:
region = params[:state] || params[:country] || 'US'
什麼是使用presence
點?
在Rails的文檔,the example provided爲object.presence
方法是:object.presence的要點是什麼?
region = params[:state].presence || params[:country].presence || 'US'
但不是僅僅等同於:
region = params[:state] || params[:country] || 'US'
什麼是使用presence
點?
這裏的一點:每個對象
region = params[:state].presence || 'US'
# => 'US'
region = params[:state] || 'US'
# => ''
更重要的是,它以同樣的方式工作(即返回nil
如果對象是 '空'):
''.presence
# => nil
所以如果params[:state] == ''
例如:
[].presence
# => nil
這裏的文檔,以供參考:
http://api.rubyonrails.org/classes/Object.html#method-i-presence
我只是用它在我發現整齊的有效途徑。我的變量是一個字符串,如果它是空字符串我想零,否則我希望它轉換爲一個整數。
x.presence.try(&:to_i)
"".presence.try(&:to_i) # => nil
"22".presence.try(&:to_i) # => 22
爲什麼'nil.to_i#=> nil'?它應該是零 –
@NickolayKondratenko,因爲有時你想區分一個空白值和字符串「0」。 – Kelvin
沒有,當他們爲'空白應對?' – apneadiving
@apneadiving沒有,你需要 '的ActiveSupport' 後,每'Object'實例響應'空?'。 參考: http://api.rubyonrails.org/classes/Object.html –
@apneadiving查看'blank?'源代碼。有實現這種不同的行爲,取決於對象是否響應'empty?'。 –