Abstand um Klammern in Ruby

8

Ich hatte in letzter Zeit einige Probleme damit, dass ein Pfad richtig funktioniert. Die Lösung erwies sich als einfach, aber ich hatte ein unerwartetes Problem, das mich daran hinderte. Die folgende Zeile, die in einer Erb-Vorlage enthalten ist, funktioniert perfekt:

%Vor%

Dies tut nicht:

%Vor%

Es scheint, dass der Abstand vor der öffnenden Klammer in diesem Fall nicht erlaubt ist. Der Fehler, den ich bekomme, ist dies:

%Vor%

Kann jemand erklären, warum dies einen Fehler verursacht?

EDIT: für Info, das ist Ruby 1.9.2 und Rails 3.0.9, auf Windows 7 64-Bit

    
asc99c 06.10.2011, 13:41
quelle

3 Antworten

6

Wer vor den Klammern einer Parameterliste ein Leerzeichen setzt, bekommt das, was er verdient, sage ich!

Das Problem ist, dass es den Aufruf von button_to im zweiten Beispiel (Leerzeichen vor den Klammern) schließt und nicht weiß, was als nächstes zu tun ist.

    
Dave Newton 06.10.2011, 15:30
quelle
4

Ich bin mir nicht sicher, ob Ruby's Parser tatsächlich so funktioniert, aber ich denke so: Das Komma vor delivery_confirm_path hat einen höheren Vorrang als die Klammern, es sei denn, du entfernst den Platz.

Der Parser sieht den Methodenaufruf folgendermaßen:

%Vor%

Mit anderen Worten, delivery_confirm_path wird als Methodenaufruf ohne Argumente analysiert. Aber dann sieht der Parser das hängende ( @delivery ) und es ist keine gültige Syntax, weil es dem Methodenaufruf button_to folgt. Es ist, als hätten Sie diese ungültige Syntax:

%Vor%

Sie können die Kommapriorität umgehen, indem Sie stattdessen Folgendes tun:

%Vor%

Aber es ist normalerweise einfacher, den Platz einfach zu entfernen.

Wenn Sie bei einem Methodenaufruf ein Leerzeichen vor den Klammern verwenden, werden die Klammern als Gruppierung und nicht als Klammern für die Methodenaufrufe verwendet.

Hier sind einige Beispiele, die helfen sollen. Ich verwende die folgende Methode in meinen Beispielen:

%Vor%

Wenn du auf Ruby 1.9 stehst, schlage ich vor, bei der Ausführung der Beispiele Warnungen zu aktivieren: $-w = true . Dies zeigt warning: (...) interpreted as grouped expression an, wenn Sie Leerzeichen vor Klammern haben.

Diese beiden Zeilen sind syntaktisch äquivalent:

%Vor%

Das liegt daran, dass (1) als gruppierter Ausdruck nur 1 ist.

Was nützt die Gruppierung?

Ein Grund ist nur für mehr Lesbarkeit. Sie könnten es leichter finden, mit Parens in diesem Ausdruck zu verstehen, ohne:

%Vor%

Ein anderer Grund ist der Vorrang. Nehmen wir an, ich habe eine Operation mit niedriger Priorität, wie der Operator and . Da der Methodenaufruf Vorrang hat, wird and nach dem Aufruf ausgewertet. Dies gibt [2] aus und gibt 3 zurück:

%Vor%

Aber dies druckt [3] und gibt true zurück:

%Vor%

Beachten Sie jedoch, dass das Beispiel and etwas erfunden ist, weil Ruby das Entfernen des vorhergehenden Platzes nicht erlaubt. (Ich bin nicht sicher, warum, denn && ist erlaubt, anstatt and .) Aber Sie bekommen die Idee.

%Vor%

Dies zeigt, dass durch das Entfernen des Leerzeichens vor einem Methodenaufruf der Methodenaufruf Vorrang vor einem Komma erhält:

%Vor%

Ein weiteres Problem ist die Argumentliste.

%Vor%     
Kelvin 01.10.2012 20:05
quelle
-1

Sie können kein Leerzeichen zwischen einer Funktion und ihren Argumenten verwenden. Tatsächlich möchte die Parser-Engine in Rails die Klammer der Funktion unmittelbar nach ihrem Aufruf haben. Das ist das Leben der Schienen.

Ich hoffe, Ihnen zu helfen.

Danke

    
Sebastien 06.10.2011 13:47
quelle

Tags und Links