可能重复:
在 nil 的情况下分配一个替代值
在 Lua 中我使用
x = value or "default_if_value_is_nil"
(作为 的快捷方式if value ~= nil then x = value end
)
我可以在 Ruby 中做类似的事情吗?
可能重复:
在 nil 的情况下分配一个替代值
在 Lua 中我使用
x = value or "default_if_value_is_nil"
(作为 的快捷方式if value ~= nil then x = value end
)
我可以在 Ruby 中做类似的事情吗?
x = value || "default_if_value_is_nil_or_false"
请注意这里的“或错误”,尽管在 Lua 中也可能如此。
你实际上可以在 ruby 中做同样的事情
x = nil_value || "default"
请注意,这也适用于任何其他“虚假”值
x = false_value || "default"
x = value or "default_if_value_is_nil"
是一个完全合法的 Ruby 语句,但请注意它or
在运算符优先级中具有最低优先级之一。还要知道,在 Ruby 布尔运算中,除了 false 和 nil 之外,一切都是 true,因此即使 value 不是 nil 而是 false,这个 Ruby 语句也会回答默认值。
puts '>>> assignment = has a higher priority than or <<<'
value = 'y'
x = value or "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = false
x = value or "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = nil
x = value or "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
puts '>>> put parenthesis around or expression to have a higher priority than = <<<'
value = 'y'
x = (value or "default_if_value_is_nil")
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = false
x = (value or "default_if_value_is_nil")
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = nil
x = (value or "default_if_value_is_nil")
print 'value=', value.inspect, ', x=', x.inspect, "\n"
puts '>>> || has a higher priority than = <<<'
value = 'y'
x = value || "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = false
x = value || "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
value = nil
x = value || "default_if_value_is_nil"
print 'value=', value.inspect, ', x=', x.inspect, "\n"
输出:
>>> assignment = has a higher priority than or <<<
value="y", x="y"
value=false, x=false
value=nil, x=nil
>>> put parenthesis around or expression to have a higher priority than = <<<
value="y", x="y"
value=false, x="default_if_value_is_nil"
value=nil, x="default_if_value_is_nil"
>>> || has a higher priority than = <<<
value="y", x="y"
value=false, x="default_if_value_is_nil"
value=nil, x="default_if_value_is_nil"