3 Stimmen

Camping's Pfadbau-Methode

Kann mir jemand diesen Teil des Codes von Lucky Stiff's Camping micro-framework erklären?

# Simply builds a complete path from a path +p+ within the app.  If your
# application is mounted at <tt>/blog</tt>:
#
#   self / "/view/1"    #=> "/blog/view/1"
#   self / "styles.css" #=> "styles.css"
#   self / R(Edit, 1)   #=> "/blog/edit/1"
#
def /(p); p[0] == ?/ ? @root + p : p end

Quelle

4voto

randomuser Punkte 1788
def /(p);

Der Name der Methode lautet ' / ', der den Parameter ' p '

p[0] == ?/

prüfen, ob die Zeichenkette mit einem ' beginnt / '. Das Fragezeichen wird verwendet, um anzugeben, dass das Zeichen wörtlich zu verwenden ist. Sie können es auch als '/' betrachten.

p[0] == ?/ ? exp1:exp2

Das zweite Fragezeichen steht für die bedingte Bewertung. Wenn der Ausdruck (p[0] == ?/) wahr ist, wird exp1 ausgewertet, ansonsten wird exp2 ausgewertet.

Wenn also im obigen Fall der String-Parameter mit einem '/' dann den Wert @Root + p zurückgeben, d. h. ihm Root voranstellen. Andererseits, wenn der Parameter nicht mit einem '/' dann geben Sie sie als solche zurück.

0voto

Magnus Holm Punkte 1211

Man kann es auch anders schreiben:

def /(p)
  if p[0] == ?/
    @root + p
  else
    p
  end
end

p[0] gibt das erste Zeichen der Zeichenkette zurück. ?/ gibt die / Charakter. Beachten Sie, dass in 1.8 ein Zeichen durch eine ganze Zahl dargestellt wird ( ?/ == 47 ), während es in 1.9 eine einstellige Zeichenfolge ist ( ?/ == "/" ). Nichtsdestotrotz, p[0] wird immer übereinstimmen mit ?/ .

Auf einer höheren Ebene wird also geprüft, ob das erste Zeichen in der Zeichenkette ein Schrägstrich ist, und wenn ja, wird die @root (die in Camping::Base#initialize gesetzt wird) zu.

Wenn Ihre Anwendung also unter /blog gemountet ist, @root == "/blog" y self / "/post/1" == "/blog/post/1" .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X