2013-03-27 50 views
0
(require :cl-who) 
(defmacro rawpage ((&rest head) &body body) 
    `(cl-who:with-html-output-to-string (*standard-output* nil :prologue t) 
    (:html 
    (:head 
     (:meta :charset "utf-8") 
     ,@head) 
    (:body 
     ,@body)))) 

(defmacro str+ (&rest strs) 
    `(concatenate 'string ,@strs)) 

(rawpage() (:div (str+ "hello," "name"))) 

這段代碼不會輸出我想要的內容。 我預期輸出:未在CL-WHO模板中呈現的字符串

<html><head><meta charset='utf-8' /></head><body><div>hello,name</div></body></html> 

但是,它的輸出:

<html><head><meta charset='utf-8' /></head><body><div></div></body></html> 

任何人都可以告訴我爲什麼?我正在使用SBCL。

+1

一個良好的首次啓動可能是做'(macroexpand-1「(rawpage()(: div(str +「hello,」「name」))))'看看它實際擴展到了什麼。其次,用'defun str +(&rest strs)(格式nil「〜{〜a〜}」strs)'替換你的'str +'宏可能會更好一些(不要使用宏,在這裏函數可以做到這一點) 。 – Vatine 2013-03-27 14:24:12

回答

4

你的問題是,在CL-WHO非常量字符串應該放在裏面str這樣的:

(defmacro rawpage() 
    (:div (str (str+ "hello," "name"))))