Ale*_*ski 12 ruby ternary-operator
尝试使用ruby中的条件运算符,
def nada
false ? true : nil
end
def err
false ? true : raise('false')
end
Run Code Online (Sandbox Code Playgroud)
按预期工作但是
def reflection
false ? true : return false
end
Run Code Online (Sandbox Code Playgroud)
生产一个 syntax error, unexpected keyword_false, expecting keyword_end
def reflection
false ? true : return(false)
end
Run Code Online (Sandbox Code Playgroud)
和括号尝试 syntax error, unexpected tLPAREN, expecting keyword_end
然而
def reflection
false ? true : (return false)
end
Run Code Online (Sandbox Code Playgroud)
如预期,以及更详细的工作if... ... then... ... else... ...end
def falsy
if false then true else return false end
end
Run Code Online (Sandbox Code Playgroud)
也按预期工作.
Zab*_*bba 18
通过将整个return表达式放在括号中,您可以像这样使用它:
def reflection
false ? true : (return false)
end
Run Code Online (Sandbox Code Playgroud)
当然,这样使用起来没什么意义,但是因为你正在试验(好!),上面的作品!错误是由于我认为Ruby语法的工作方式 - 它期望某个结构形成一个有效的表达式.
UPDATE
引用规范草案中的一些信息:
表达式是一个程序构造,它构成一个语句(见12).单个表达式可以是一个语句作为表达式语句(见12.2).12
注意表达式和语句之间的差异在于表达式通常在需要其值的情况下使用,但通常在不一定需要其值的情况下使用语句.但是,也有一些例外.例如,jump-expression(参见11.5.2.4)没有值,可以使用compound-statement的最后一个语句的值.
NB.在上文中,跳跃表达包括return其中.
我认为这都与ruby解析器有关.
return为三元运算符的else-expressionfalse而不是发现时,它会感到惊讶endreturn false在括号中包装会导致ruby将整个事物解释为else-expressionreturn(false)不起作用,因为ruby仍然试图将该return部分解释为else-expression,并且当它找到左括号(更新)时会感到惊讶注意:我不认为这是一个很好的答案.
例如,一个很好的答案可以参考ruby语法来解释解析错误.
| 归档时间: |
|
| 查看次数: |
5096 次 |
| 最近记录: |