non riesco a capire precedenza degli operatori di Ruby in un seguente esempio:Capire la precedenza di assegnazione e operatore logico in Ruby
x = 1 && y = 2
Dal &&
ha precedenza maggiore rispetto =
, la mia comprensione è che in modo simile a +
e *
operatori:
1 + 2 * 3 + 4
che si risolve come
1 + (2 * 3) + 4
dovrebbe essere pari a:
x = (1 && y) = 2
Tuttavia, tutte le fonti di Ruby (tra cui la sintassi del parser Ripper
) analizzano questo come
x = (1 && (y = 2))
Perché?
EDIT [2016/08/01] attenzione
Let su una sottoespressione: 1 && y = 2
Secondo le regole di precedenza, dovremmo cercare di analizzare come:
(1 && y) = 2
che non ha senso perché =
richiede un LHS specifico (variabile, costante,Elemento dell'arrayecc.). Ma dal momento che (1 && y)
è un'espressione corretta, come deve comportarsi il parser?
Ho provato a consultare Ruby parse.y
, ma è così simile a spaghetti che non riesco a capire le regole specifiche per l'assegnazione.
Bella domanda, c'è qualche merito nell'argomento. –