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

Ruby on rails Ruby-如果变量不存在,则返回默认值,ruby-on-rails,ruby,operators,Ruby On Rails,Ruby,Operators,我经常遇到以下情况:我想设置一个变量,除非它存在。当然,这样做很容易做到: var1 = "" var1 = "dhiughr" unless var1.present? 如果为nil,则可以使用简单的| |=运算符来完成,但由于空字符串不是nil,因此它将不起作用。我试过阅读Ruby的or运算符,理论上应该可以: var1 = "" or "dhiughr" 但事实并非如此。我希望在第一个字符串不存在时选择运算符中的第二个字符串 我做错了什么?在ruby中,空字符串是真实值。看 红宝石:

我经常遇到以下情况:我想设置一个变量,除非它存在。当然,这样做很容易做到:

var1 = ""
var1 = "dhiughr" unless var1.present?
如果为nil,则可以使用简单的| |=运算符来完成,但由于空字符串不是nil,因此它将不起作用。我试过阅读Ruby的or运算符,理论上应该可以:

var1 = "" or "dhiughr"
但事实并非如此。我希望在第一个字符串不存在时选择运算符中的第二个字符串


我做错了什么?

在ruby中,空字符串是真实值。看

红宝石:

带导轨:

var1 = ''
var1 = var1.blank? ? 'dhiughr' : var1

在ruby中,空字符串是真实值。看

红宝石:

带导轨:

var1 = ''
var1 = var1.blank? ? 'dhiughr' : var1

您可以使用active_support library提供的扩展方法以这种方式执行此操作:

它的工作原理与您期望的一样:

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

您可以使用active_support library提供的扩展方法以这种方式执行此操作:

它的工作原理与您期望的一样:

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

为什么在你看来或运算符理论上应该起作用?有没有办法得到表达式的一行线?是的,看看我的答案。为什么在你看来或运算符理论上应该起作用?有没有办法得到表达式的一行线?是的,看看我的答案。他为什么不用| |=?@scaryguy仔细阅读这个问题,你就会得到答案。我不知道。我的答案有两张反对票,我把它删掉了。。我想人们不喜欢别人谈论他们自己的投票情况。他为什么不使用| |=?@scaryguy仔细阅读这个问题,你就会得到答案。我不知道。我的答案有两张反对票,我把它删掉了。。我想人们不喜欢别人谈论他们自己的投票情况。