我试图在Racket中制作一个简单的书签网页应用程序。
它意味着收到一个网址作为CGI的论点,而现在,我只是想通过反映它来确认我收到它。
(define (start request)
(response/xexpr
(let* ([bindings (request-bindings request)]
[url (if (exists-binding? 'url bindings)
(extract-binding/single 'url bindings)
"NO URL")])
`(html
(head (title "TITLE"))
(body (h2 "TITLE")
(p "URL = " url))
))))
但是,不要看到我期望看到的内容..这是一个包含
的页面URL = http://google.com
我正在看
URL = &url;
这表明url在xexpr(被视为实体)中被字面引用,而不是被评估为变量。
那么我做错了什么?如何评估网址?
答案 0 :(得分:5)
您需要使用quasiquote
和unquote
将值注入引用的扩展中,更常见的是它们的读者缩写等价物`
和,
。当您在unquote
/ ,
内使用quasiquote
/ `
时,它会评估表达式并将其插入周围的引号:
> (define url "http://google.com")
> `(p "URL = " ,url)
(p "URL = " "http://google.com")
您应该将,
放在模板中的url
前面以取消引用它。
有关引用和准引用的更详细说明,请参阅Appendix A of this answer。
答案 1 :(得分:2)
使用,url
:
`(html
(head (title "TITLE"))
(body (h2 "TITLE")
(p "URL = " ,url))
))))
在文档中查找unquote
:http://docs.racket-lang.org/reference/quasiquote.html?q=unquote#%28form.%28%28quote.~23~25kernel%29._unquote%29%29