Ich kann nicht Vorrang von Ruby Operatoren in einem folgenden Beispiel verstehen:Verständnis Vorrang der Zuweisung und logischer Operatoren in Ruby
x = 1 && y = 2
Da &&
höhere Priorität hat als =
, mein Verständnis ist, dass ähnlich wie +
und *
Betreiber:
1 + 2 * 3 + 4
die als
1 + (2 * 3) + 4
aufgelöst wird
x = (1 && y) = 2
jedoch alle Ruby-Quellen (einschließlich interner Syntaxparser Ripper
) analysieren dies als
x = (1 && (y = 2))
Warum:
es sollte gleich sein?
EDIT [2016.08.01]
Fokus Lassen Sie uns auf einem subexpression: 1 && y = 2
Nach Vorrangregeln, sollten wir versuchen, es so zu analysieren:
(1 && y) = 2
was macht keinen Sinn, weil =
eine bestimmte LHS (Variable erfordert, konstant, []
Array-Artikel usw.). Aber da (1 && y)
ist ein korrekter Ausdruck, wie soll den Parser mit ihr umgehen?
Ich habe versucht, mit Rubys parse.y
Beratung, aber es ist so Spaghetti-ähnlich, dass ich bestimmte Regeln für die Zuordnung nicht verstehen kann.
Schöne Frage, es gibt einige Vorteile in der Argumentation. –