我对Ruby除非conditional如何与||运算符一起工作感到困惑。
所以我基本上得到了:
<% unless @instance_variable.method || local_variable.another_method %>
code block
<% end %
目前,第一部分评估为假,第二部分评估为真。我没有收到任何错误,它是我想要的。然而,如果我只写:
<% unless @instance_variable.method %>
code block
<% end %>
当我写时,我抛出了一个错误
<% unless @instance_variable.method && local_variable.another_method %>
code block
<% end %>
所以我的问题。如果第一部分评估为false,它会缩短并遍历代码块,而不看另一边吗?如果是这样的话,为什么把第二部分去掉会产生错误?这一切是如何运作的?
抱歉,如果你需要代码,我觉得这是一个逻辑/代数解决方案。
Unless
与If
完全相反。它是一个否定的If
。
当条件为false
时,Unless
将工作
2.3.4 :010 > unless false || false
2.3.4 :011?> puts "unless block"
2.3.4 :012?> end
unless block
=> nil
因此,根据这个或条件,当两侧都是false
时,||
的结果是false
2.3.4 :019 > false || false
=> false
否则结果总是true
下面的代码不会执行put语句,因为该条件给出了真正的
2.3.4 :022 > unless false || true
2.3.4 :023?> puts "unless block"
2.3.4 :024?> end
=> nil
2.3.4 :019 > false || true
=> true
并且你的&&
是有效的,因为它在stmt以下执行时给出false
,而unless
使用false:-
2.3.4 :019 > false && true
=> false
欲了解更多信息,请参阅https://mixandgo.com/learn/if-vs-unless-in-ruby