2014-09-04 102 views
3

我很惊讶Ruby中语法敏感的特定位。这些所有的工作:红宝石嵌套分配和无方法方法调用

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

但这并不:相反

method2(var = method1 arg) 

,我必须这样做要么这一点,有额外的括号:

method2(var = method1(arg)) 

..或者这一点,这是我发现更多含糊不清的版本:

method2 var = method1(arg) 

我认为这是一个特定的设计决定或另一个的副作用,并且希望对这些决定有所洞察。

请注意,我不是在寻找任何有关风格的意见;我不是在问什么看起来更好,或者你认为应该或不应该工作。我甚至会规定,如果完全将其分解为两个单独的陈述,那么这个特定的构造就会更清晰。我只是对Ruby为什么会以这种方式工作的真实原因感到好奇,因为任何人都可能拥有这些背景信息。

+0

这是什么古老的说法,只有Perl可以解析Ruby?或者类似的东西... – 2014-09-05 04:14:29

+0

@JörgWMittag - 因为没有人可以提供更多的洞察力,请发表您的评论作为答案,我会接受它。 – 2014-10-07 13:51:07

回答

1

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

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