2014-09-04 121 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。更有可能的是,它是兩種奇怪的解析角落案例,它們以一種更爲怪異的方式進行交互,而不是任何有意識的設計決策。