3 Stimmen

Methodik beim Camping-Pfadbau

Könnte jemand mir diesen Teil des Codes aus Lucky Stiffs Camping-Mikrorahmens erklären:

# Baut einfach einen vollständigen Pfad aus einem Pfad +p+ innerhalb der App. Wenn Ihre Anwendung unter /blog montiert ist:
#
#   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);

Methode heißt '/', das den Parameter 'p' erhält

p[0] == ?/

Überprüfen, ob der String mit einem '/' beginnt. Das Fragezeichen wird verwendet, um anzugeben, dass das Zeichen wörtlich verwendet wird. Sie können es auch als '/' betrachten.

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

Das zweite Fragezeichen dient der bedingten Auswertung. Wenn der Ausdruck (p[0] == ?/) wahr ist, wird exp1 ausgewertet, andernfalls exp2.

Also, in dem obigen Fall, wenn der Zeichenparameter mit einem '/' beginnt, geben Sie den Wert @root + p zurück, indem Sie ihn mit root versehen. Andernfalls geben Sie ihn unverändert zurück.

1 Stimmen

Vielen Dank für Ihre Erklärung. Der Fragezeichenoperator hat mich verwirrt.

0voto

Magnus Holm Punkte 1211

Hier ist eine weitere Möglichkeit, es zu schreiben:

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

p[0] gibt das erste Zeichen im String zurück. ?/ gibt das / Zeichen zurück. Beachten Sie, dass in 1.8 ein Zeichen durch eine Ganzzahl dargestellt wird (?/ == 47), während es in 1.9 ein einzeiliger String ist (?/ == "/"). Dennoch wird p[0] immer konsistent mit ?/ sein.

Auf einer höheren Ebene überprüft es also, ob das erste Zeichen im String ein Schrägstrich ist, und falls ja, fügt es das @root (das in Camping::Base#initialize festgelegt ist) hinzu.

Also, wenn Ihre Anwendung unter /blog eingebunden ist, gilt @root == "/blog" und 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