Ruby-在一行中if和excess的组合



我遇到了一行代码,它以我从未遇到过的方式结合了ifunless的使用:

return foo if condition_a unless condition_b

我的期望是这相当于:

unless condition_b
if condition_a
return foo
end
end

这是正确的吗?

是的,这些表达式是相同的。第一个不那么可读,也不那么常见,因为它可能会令人困惑:

irb(main):016:0> condition_a = true
irb(main):017:0> condition_a = true
irb(main):018:0> condition_b = false
irb(main):019:0> foo = 'foo'
irb(main):020:0> p foo if condition_a unless condition_b
"foo"
=> "foo"
irb(main):021:0> condition_b = true
irb(main):022:0> p foo if condition_a unless condition_b
=> nil
irb(main):023:0> condition_a = false
irb(main):024:0> condition_b = false
irb(main):025:0> p foo if condition_a unless condition_b
=> nil
irb(main):026:0>

最新更新