如果我这样做:
(false true)
Run Code Online (Sandbox Code Playgroud)
正如我所料,它因语法错误而失败.但如果我这样做:
(false
true)
Run Code Online (Sandbox Code Playgroud)
代码被执行,它抛弃第一个条件并返回第二个条件的结果.
这被视为错误还是功能?
J. *_*mes 15
行结尾是可选的,因此在这种情况下,返回会导致解析器将其解释为以下内容:
(false; true)
Run Code Online (Sandbox Code Playgroud)
评估为:
(true)
Run Code Online (Sandbox Code Playgroud)
如果这些是方法调用,则两者都将被评估,但只会发出最后一个.例如:
x = (p "hello"
p "world"
2)
Run Code Online (Sandbox Code Playgroud)
这将输出"hello"和"world",x将等于2
括号用于分组,换行符用作表达式分隔符.所以,你在这里只是一组两个表达式.没有什么可以拒绝的.
这很有用,因为这个众所周知的习语:
def foo(bar = (bar_set = true; :baz))
if bar_set
# optional argument was supplied
end
end
Run Code Online (Sandbox Code Playgroud)
Ruby中没有其他方法可以确定是否提供了可选参数.
基本上,这会产生副作用,例如在我的示例中指定变量或在@ 32bitkid的示例中打印到屏幕.在你的例子中,没有副作用,这就是你无法看到实际发生的原因.
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |