在ruby中分配变量之前是否有一种检查存在的简写方法?

时间:2016-10-26 22:46:58

标签: ruby-on-rails ruby ruby-on-rails-4.2 ruby-2.0

是否有更短的方法(考虑a已设置为某个值):

a = b if b.present?

我之前可能遇到过这样做的方法,但不记得了。

5 个答案:

答案 0 :(得分:1)

a = b if b.present?本身在功能上等同于:

if b.present?
  a = b
else
  a = nil
end

所以你可以使用Object#presence

  

<强>存在()
  如果接收者存在,则返回接收者,否则返回nilobject.presence相当于

object.present? ? object : nil
像这样:

a = b.presence

如果a已有值且您真的在说:

a = something_interesting
a = b if b.present?
然后你可以说:

a = b.presence || something_interesting

答案 1 :(得分:1)

如果b是只想评估一次的复杂表达式,则可以使用

.navbar-collapse ul { height: 100vh; }

答案 2 :(得分:0)

你可以这样做

changeBackground()

function changeBackground(tabId) {
    chrome.tabs.insertCSS( tabId, {
        code: "body { border: 20px dotted pink; }"
    }, handleExecuteScriptAndInsertCSSErrors.bind(null,tabId));
}

about:newtab

关于a = b if !b.nil? 的事情是它可以保护您免受空数组,哈希和其他集合的陷阱。因此,如果您不关心空集合,这些将起作用。

答案 3 :(得分:0)

您可以使用||=运算符,但这取决于您希望代码执行的操作。如果b不是a,则此运算符会将b的值分配给nil。例如,如果a = 5并执行以下操作a ||= b仅当<{strong> b不是a时,b nil,但a之前未声明a的值nil对于此代码a ||= b,{1}}将为irb(main):001:0> b = nil => nil irb(main):002:0> a ||= b => nil irb(main):003:0> b = 5 => 5 irb(main):004:0> a ||= b => 5 irb(main):005:0> a ||= nil => 5

实施例

string_query = "Bob@gmail.com"

答案 4 :(得分:0)

|| =运算符是您正在寻找的。它在分配值之前检查操作数是否为零或存在。如果存在不分配,如果nil或undefined将分配值。

[1] pry(main)> a
NameError: undefined local variable or method `a' for main:Object
from (pry):1:in `__pry__'
[2] pry(main)> a ||= 100
=> 100
[3] pry(main)> a = nil
=> nil
[4] pry(main)> a ||= 100
=> 100
[5] pry(main)> a ||= 200
=> 100