首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列表中生成HTML

如何从列表中生成HTML
EN

Stack Overflow用户
提问于 2021-11-15 04:40:15
回答 1查看 83关注 0票数 1

使用CL-WHO生成超文本标记语言的常用方法是使用宏with-html-outputwith-html-output-to-string。这使用特殊的语法。例如:

代码语言:javascript
复制
(let ((id "greeting")
      (message "Hello!"))
  (cl-who:with-html-output-to-string (*standard-output*)
    ((:p :id id) message)))

是否可以将数据((:p :id id) message)编写为列表,而不是使用上面所示的宏语法?例如,我想将HTML定义为如下列表:

代码语言:javascript
复制
(let* ((id "greeting")
       (message "Hello!")
       (the-html `((:p :id ,id) ,message)))
  ;; What should I do here to generate HTML using CL-WHO?
  )

CL-WHO能从一个普通的Lisp列表中产生HTML吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-15 09:06:55

您希望将代码插入到表达式中。

实际上,你需要eval:

代码语言:javascript
复制
(let* ((id "greeting")
       (message "Hello!")
       (the-html `((:p :id ,id) ,message)))
  (eval `(cl-who:with-html-output-to-string (*standard-output*)
    ,the-html)))

但这并不适合使用eval。但是宏包含一个隐含的eval。我会为此定义一个宏,并调用该宏:

代码语言:javascript
复制
(defun html (&body body)
  `(cl-who:with-html-output-to-string (*standard-output*)
    ,@body))

;; but still one doesn't get rid of the `eval` ...
;; one has to call:
(let* ((id "greeting")
       (message "Hello!")
       (the-html `((:p :id ,id) ,message)))
  (eval `(html ,the-html)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69969577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档