为什么这不是语法错误?
如果我这样做:
(false true)
正如我所料,它因语法错误而失败。 但如果我这样做:
(false true)
代码被执行,它抛弃第一个条件并返回第二个条件的结果。
这被视为错误还是function?
行结尾是可选的,因此在这种情况下,返回会导致解析器将其解释为以下内容:
(false; true)
评估为:
(true)
如果这些是方法调用,那么两者都将被评估,但只会发出最后一个。 例如:
x = (p "hello" p "world" 2)
这将输出“hello”和“world”,x将等于2
括号用于分组,换行符用作表达式分隔符。 所以,你在这里只是一组两个表达式。 没有什么可以拒绝的。
这很有用,因为这个众所周知的习语:
def foo(bar = (bar_set = true; :baz)) if bar_set # optional argument was supplied end end
Ruby中没有其他方法可以确定是否提供了可选参数。
基本上,这会产生副作用,例如在我的示例中指定变量或在@ 32bitkid的示例中打印到屏幕。 在你的例子中,没有副作用,这就是你无法看到实际发生的原因。
如果你有警告,Ruby可以给你一个警告。
$VERBOSE = true def foo (false true) end
给你
(irb):3: warning: unused literal ignored
在Ruby 1.9.1 patchlevel 378和Ruby 1.8.7 patchlevel 330中。
请参阅如何运行带有警告的所有Ruby脚本? 如何运行带有警告的所有Ruby脚本。