2014-10-31 10 views
7

Wenn ich :[email protected] und :[email protected] schreibe, werden sie zu :~ und ausgewertet, was auch durch Schreiben von :~ und erreicht werden kann. Wie werden diese Ausdrücke analysiert, und wo ist die @?Wie werden `: ~ @` und `:! @` Geparst?

+1

@engineersmnky, ich denke, es bezieht sich auf ein Symbol. –

+0

Sie könnten feststellen, dass ': - @' wie erwartet funktioniert, aber ':! @' Nicht und das '- @' ist die unäre Negationsmethode, aber '! @' Ist keine Methode. –

+1

Nach ruby_parser geht es nirgendwo: 'RubyParser.new.parse (": ~ @ ") # => s (: leuchtet,: ~)' – ThomasSevestre

Antwort

1

Es ist mit der Präzedenz im Parser zu tun. Ein einfacher Strich besiegt die Doppelpunkt-Mittel-a-Symbol Syntax auch:

2.1.2 :004 > c = :test-thing 
NameError: undefined local variable or method `thing' for main:Object 

Es ist einfach genug, um ihn zu arbeiten, aber: versuchen :'[email protected]',

(Natürlich, wenn Sie eine solche zu schaffen vermeiden können ein seltsames Symbol in Ihrem Code, das könnte eine bessere Idee sein ...)

+1

Wenn es so geparst wird, dann gibt es kein Problem. Das Problem ist, dass es still als eine andere Sache geparst wird. Und es ist kein komisches Symbol. Es ist ein Methodenname und sollte auch der Rückgabewert der Methodendefinition einer solchen Methode sein. – sawa

+0

@sawa - Ich denke, es sollte einen Fehler auslösen, wie in meinem 'Ding' Beispiel. Mit "komisch" meinte ich nur, dass "@" eine bestimmte Ruby-Bedeutung hat, das Präfix für ein Klassenattribut, und als solches stelle ich mir vor, dass der Parser es als Sonderfall behandelt. –

Verwandte Themen