为什么这不是语法错误?

L2G*_*L2G 12 ruby syntax

如果我这样做:

(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


Jör*_*tag 7

括号用于分组,换行符用作表达式分隔符.所以,你在这里只是一组两个表达式.没有什么可以拒绝的.

这很有用,因为这个众所周知的习语:

def foo(bar = (bar_set = true; :baz))
  if bar_set
    # optional argument was supplied
  end
end
Run Code Online (Sandbox Code Playgroud)

Ruby中没有其他方法可以确定是否提供了可选参数.

基本上,这会产生副作用,例如在我的示例中指定变量或在@ 32bitkid的示例中打印到屏幕.在你的例子中,没有副作用,这就是你无法看到实际发生的原因.