是否有更短的方法(考虑a
已设置为某个值):
a = b if b.present?
我之前可能遇到过这样做的方法,但不记得了。
答案 0 :(得分:1)
仅a = b if b.present?
本身在功能上等同于:
if b.present?
a = b
else
a = nil
end
所以你可以使用Object#presence
:
像这样:<强>存在()强>
如果接收者存在,则返回接收者,否则返回nil
。object.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