Ruby嵌套赋值和无括号方法调用

时间:2014-09-04 23:07:17

标签: ruby

我对Ruby中特定的语法敏感性感到惊讶。这些都有效:

 var = method arg
 var2 = (var1 = method arg)
 method2(method1 arg)

但这不是:

method2(var = method1 arg)

相反,我必须使用额外的括号来执行此操作:

method2(var = method1(arg))

..或者这个,我发现它比失败的版本更加模棱两可:

method2 var = method1(arg)

我认为这是一个特定的设计决策或另一个的副作用,并希望对这些决定有任何见解。

请注意,我不是在寻找关于风格的任何意见;我不是问什么看起来更好,或者你认为应该或不应该做什么。如果完全分成两个单独的陈述,我甚至会规定这个特定的构造会更清楚。我只是对Ruby的实际原因感到好奇,因为任何可能拥有该背景信息的人都可以这样做。

1 个答案:

答案 0 :(得分:1)

  

我认为这是一个特定的设计决策或另一个的副作用,并希望对这些决定有任何见解。

Ruby的语法非常复杂。而且由于大多数Ruby实现都使用像Bison这样的解析器生成器,但实际上它并不足以解析这种可笑的复杂语言the parsers tend to be even more ridiculously complex。更有可能的是,它的两个奇怪的解析角案例以比任何有意识的设计决策更奇怪的方式进行交互。