Ruby - 如果变量不存在,则返回默认值

时间:2014-02-18 12:24:09

标签: ruby-on-rails ruby operators

我经常遇到以下情况:我想设置一个变量,除非它存在。当然,这可以通过这样做轻松完成:

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

如果是nil,可以使用简单的||=运算符完成此操作,但由于空字符串不是nil,因此无效。我试过阅读Ruby或运算符,理论上应该可以工作:

var1 = "" or "dhiughr"

但事实并非如此。我希望当第一个字符串不是present时会选择第二个字符串(从运算符开始)?

我做错了什么?

2 个答案:

答案 0 :(得分:6)

你可以这样做,使用Object#presence方法(来自active_support库的扩展名):

var1 = var1.presence || 'dhiughr'

它按预期工作:

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

答案 1 :(得分:1)

在ruby中,空字符串是值得的。见What's truthy and falsey in Ruby?

红宝石:

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

使用rails:

var1 = ''
var1 = var1.blank? ? 'dhiughr' : var1
相关问题