3

可能重复:
在 nil 的情况下分配一个替代值

在 Lua 中我使用

x = value or "default_if_value_is_nil"

(作为 的快捷方式if value ~= nil then x = value end

我可以在 Ruby 中做类似的事情吗?

4

3 回答 3

5
x = value || "default_if_value_is_nil_or_false"

请注意这里的“或错误”,尽管在 Lua 中也可能如此。

于 2012-12-30T21:49:56.200 回答
2

你实际上可以在 ruby​​ 中做同样的事情

x = nil_value || "default"

请注意,这也适用于任何其他“虚假”值

x = false_value || "default"
于 2012-12-30T21:51:45.403 回答
2
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"
于 2012-12-30T23:56:31.873 回答