Ruby 价值或;“违约”;
可能重复:Ruby 价值或;“违约”;,ruby,Ruby,可能重复: 我用Lua x = value or "default_if_value_is_nil" (作为的快捷方式,如果value~=nil,则x=value end) 我可以用Ruby做类似的事情吗 x = value || "default_if_value_is_nil_or_false" 注意这里的“or false”,虽然Lua中可能也有相同的情况。您实际上可以在ruby中做同样的事情 x = nil_value || "default" 请注意,这也适用于任何其他“虚假”
我用Lua
x = value or "default_if_value_is_nil"
(作为的快捷方式,如果value~=nil,则x=value end
)
我可以用Ruby做类似的事情吗
x = value || "default_if_value_is_nil_or_false"
注意这里的“or false”,虽然Lua中可能也有相同的情况。您实际上可以在ruby中做同样的事情
x = nil_value || "default"
请注意,这也适用于任何其他“虚假”值
x = false_value || "default"
是一个完全合法的Ruby语句,但请注意,或
在运算符优先级中具有最低优先级之一。还要知道,在Ruby布尔运算中,除了false和nil之外,所有的东西都是true,因此,即使值不是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"
put'>>>assignment=的优先级高于,或者将括号括起来,或者表达式的优先级高于=| |的优先级高于=哇,这很简单。那么| |和或在Ruby中有什么区别呢?优先级或
的优先级非常低,因此a=b或c
被解释为(a=b)或c
@Bożena优先级不同,请参见和。非常感谢!但这种优先级是不寻常的,在大多数语言中,赋值的优先级最低。就像Ruby中的许多东西一样,它是从Perl借用的:
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"