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
?
我究竟做错了什么?
你可以这样做,使用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)