String-Verkettungsfehler

8

Ich habe einen Syntaxfehler festgestellt. Ich akzeptiere, dass es ein Syntaxfehler ist, aber ich bin ein wenig neugierig, warum es ein Syntaxfehler ist.

Dies funktioniert genau so, wie Sie es erwarten:

%Vor%

Dies wirft einen Fehler auf:

%Vor%

Der Fehler:

%Vor%

Seltsamerweise kann ich das zweite Pluszeichen überall hin verschieben, und Ruby scheint kein Problem damit zu haben, aber wenn dieser erste zufällig das doppelte Zitat berührt, bekomme ich einen Syntaxfehler.

Warum genau passiert das?

    
Mr. Llama 02.05.2011, 19:42
quelle

1 Antwort

12

n.to_s +"^2 = " wird als n.to_s(+"^2 = ") analysiert, was syntaktisch gültig ist und bedeutet "führe die unären Plus-Operationen für die Zeichenfolge ^2 = aus und übergebe dann das Ergebnis als Argument an to_s ". Da Zeichenfolgen jedoch keine unäre Plus-Operation haben (dargestellt durch die Methode +@ ), erhalten Sie NoMethodError ( nicht einen Syntaxfehler).

Der Grund dafür, dass es so und nicht als n.to_s() + "^2 = " analysiert wird, ist, dass puts +5 oder puts -x auch als puts() + 5 und puts() - x anstelle von% co_de geparst werden müssten, wenn es so geparst würde % und puts(+5) - und in diesem Beispiel ist es ziemlich klar, dass letzteres beabsichtigt ist.

    
sepp2k 02.05.2011, 19:54
quelle

Tags und Links