我只是想知道这个语法记录在哪里:
1 > 2 || raise("error")
我试过用它作为条件:
1 > 2 || p "test"
但它不起作用:
SyntaxError: (irb):9: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
1 > 2 || p "test"
^
from C:/Ruby193/bin/irb:12:in `<main>'
答案 0 :(得分:7)
你所拥有的东西因为需要括号而无效:
1 > 2 || p("test")
请注意,or
(and and
) has a different precedence than &&
/||
因此可以在没有括号的情况下工作(并且您正在做的事情更具语义意义):
1 > 2 or p "test"
unless
:
p "test" unless 1 > 2
答案 1 :(得分:6)
这只是一种内联方式来说“如果条件为假则引发错误”。 ||只是一个常见的OR
运算符,表达式使用short-circuit evaluation进行计算。然而,为了清楚起见,我更喜欢这个:
raise("error") unless 1 > 2
答案 2 :(得分:4)
两个执行都有效,问题是p
上的括号被排除在外。从 IRB 运行代码:
ruby-1.8.7-p302 :003 > 1 > 2 || raise("error")
RuntimeError: error
from (irb):3
通过添加(“test”),呼叫按预期工作:
ruby-1.8.7-p302 :004 > 1 > 2 || p("test")
"test"
答案 3 :(得分:0)
您在这里尝试完成的是控制流而不是条件逻辑。它是条件逻辑的无效语法。适当的控制流程将使用“和”和“或”结构。这就是他们的目的而不是,并且通常错误地假设,并且&amp;&amp; amp;和||条件运算符。它们是不同的,具有不同的评估优先顺序,应该在正确的位置使用。例子:
1 > 2 or p 'no it is not'
2 > 1 and return
instance.exists? or not_found!
instance && instance.success? or raise FailureException, 'missing or unsuccessful'
基本上,如果你试图从声明中读出真或假,请使用&amp;&amp;和||。如果您尝试基于条件评估执行代码路径,请使用and和or。