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

Sev*_*rin 1 ruby ruby-on-rails operators

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

var1 = ""
var1 = "dhiughr" unless var1.present?
Run Code Online (Sandbox Code Playgroud)

如果是nil这可以用一个简单的||=运算符来完成,但由于空字符串不是nil,它将无法工作.我试过阅读Ruby或运算符,理论上应该可以工作:

var1 = "" or "dhiughr"
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.我希望第一个字符串(从运算符右侧)选择第一个字符串present

我究竟做错了什么?

Mar*_*pka 6

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

var1 = var1.presence || 'dhiughr'
Run Code Online (Sandbox Code Playgroud)

它按预期工作:

var1 = ''
var1 = var1.presence || 'dhiughr'
var1
# => "dhiughr"
var1 = 'foo'
var1 = var1.presence || 'dhiughr'
var1
# => "foo"
Run Code Online (Sandbox Code Playgroud)