2011-01-02 7 views
0

Ich bin mir nicht sicher, ob dies ein Problem mit meiner Verwendung von cl-who (speziell with-html-output-to-string und) oder ein Problem mit meinem Verständnis von Common Lisp (wie dies ist mein erstes Projekt mit Lisp).Funktion mit Cl-Who: mit-HTML-Ausgabe ignorieren Parameter

habe ich eine Funktion Formularfelder zu erstellen:

(defun form-field (type name label) 
    (cl-who:with-html-output (*standard-output* nil) 
    (:div :class "field" 
     (:label :for name label) 
     (:input :type type :name name)))) 

Bei Verwendung dieser Funktion, das heißt: (form-field "text" "username" "Username") der Parameter label scheint ignoriert zu werden ... die HTML-Ausgabe ist:

<div class="field"><label for="username"></label> 
<input type="text" name="username"/></div> 

anstelle der erwarteten Ausgabe:

<div class="field"><label for="username">Username</label> 
<input type="text" name="username"/></div> 

Wenn ich das modifiziere eine print-Anweisung Funktion und fügen:

(defun form-field (type name label) 
    (cl-who:with-html-output (*standard-output* nil) 
    (print label) 
    (:div :class "field" 
     (:label :for name label) 
     (:input :type type :name name)))) 

Der „Benutzername“ string erfolgreich ausgegeben wird (aber immer noch in der HTML ignoriert) ... irgendwelche Ideen, was könnte die Ursache sein?

Denken Sie daran, ich rufe diese Funktion innerhalb einer cl-who:with-html-output-to-string für die Verwendung mit Hunchentoot.

Antwort

2

Diese Situation wird in der CL-WHO evaluation rules unter "Eine Form, die weder eine Zeichenfolge noch ein Schlüsselwort ..." (:label :for name label) ist unter dieser Regel beschrieben, und es wird nur ausgewertet, aber es gibt nichts aus, so dass es keinen Effekt hat . Eine einfache Lösung: Verwenden Sie stattdessen (str label).