Ich glaube, dass dieses Parsing-Verhalten absichtlich ist - kein Fehler. Es ist ein unglücklicher Nebeneffekt, dass Ruby weggelassene Klammern erlaubt. Dieser Code ist natürlich in Ordnung:
def f x, y=0
x + y
end
f 2 # 2
f 2, 3 # 5
Aber was ist das Ergebnis dieses Codes?
[f 2, 3]
[2,3]
oder [5]
? Damit der syntaktische Analysator diesen Code handhaben kann, müsste er die Komplexität der Methode verstehen. Aber weil Ruby dynamisch ist, kann nicht bestimmt werden, bis der Methodenaufruf tatsächlich ausgeführt wird.
Anstatt den mehrdeutigen Fall zuzulassen, der sicherlich zu überraschenden Situationen während der Laufzeit führen würde, entschieden sich die Entwickler für den (immer noch überraschenden, aber leicht zu behebenden) Fehler beim Parsen.
Hinweis: Sie kann immer noch argumentieren, dass in dem Fall, in dem es das letzte Element gibt es keine Zweideutigkeit ist
[3, f 2]
# should be [3, 2]
aber ich kann meine Haare vorstellen, herausziehen, wenn Rubys ich lassen, dass schreiben und dann Klapse Ich habe einen Syntaxfehler, wenn ich am Ende des Arrays ein weiteres Element hinzufüge. Ich kann die Entscheidung verstehen, nicht weggelassene Klammern innerhalb von Arrays zuzulassen.
Was ist 'x'? Bitte hinzufügen. –
Sie können die [Ruby-Grammatik] (https://stackoverflow.com/a/16629318/125816) einsehen, herausfinden und uns mitteilen! –
@SagarPandya: Es ist völlig irrelevant, denn diese Frage betrifft Syntax, nicht Semantik. –