我经常遇到以下情况:我想设置一个变量,除非它存在。当然,这可以通过这样做轻松完成:
var1 = ""
var1 = "dhiughr" unless var1.present?
如果是nil
,可以使用简单的||=
运算符完成此操作,但由于空字符串不是nil
,因此无效。我试过阅读Ruby或运算符,理论上应该可以工作:
var1 = "" or "dhiughr"
但事实并非如此。我希望当第一个字符串不是present
时会选择第二个字符串(从运算符开始)?
我做错了什么?
答案 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