使用 racket txexpr 渲染列表
Using racket txexpr to render a list
我正在尝试使用 txexpr
:
在球拍中呈现项目列表
(define (item-list items)
(if (empty? items)
(txexpr 'p empty '("No items to display."))
(txexpr* 'ul empty
(for ([item items])
(txexpr 'li empty (list (cadr item)))))))
我的测试代码是这样的:
(module+ test
(test-case "item-list will return a default message if the item list is empty"
(define result "<p>No items to display.</p>")
(define no-items empty)
(check-equal? (xexpr->html (rule-list no-items)) result))
(test-case "item-list will return an unordered list of each item"
(define result "<ul><li>email address</li><li>phone number</li></ul>")
(define two-items '((1 "email address") (2 "phone number")))
(check-equal? (xexpr->html (rule-list two-items)) result)))
当我 运行 测试时,我在第二次测试中得到以下错误:
txexpr*: contract violation
expected: txexpr-elements?
given: '(#<void>)
我现在被难住了。如何获取要呈现的项目列表?
所以要注意的是,在某些时候你会得到一个列表列表。
(define (item-list items)
(if (empty? items)
(txexpr 'p empty '("No items to display."))
(txexpr 'ul empty
(for/list ([item items])
(quasiquote (li (unquote (cadr item))))))))
这意味着我需要正确引用规则列表并且数据结构对 txexpr
来说变得可以理解。例如,运行 一个包含两项的列表
(item-list (list '(1 "one") '(2 "two")))
得到这样的数据结构:
'(ul (li "one") (li "two"))
希望对别人有帮助。
我正在尝试使用 txexpr
:
(define (item-list items)
(if (empty? items)
(txexpr 'p empty '("No items to display."))
(txexpr* 'ul empty
(for ([item items])
(txexpr 'li empty (list (cadr item)))))))
我的测试代码是这样的:
(module+ test
(test-case "item-list will return a default message if the item list is empty"
(define result "<p>No items to display.</p>")
(define no-items empty)
(check-equal? (xexpr->html (rule-list no-items)) result))
(test-case "item-list will return an unordered list of each item"
(define result "<ul><li>email address</li><li>phone number</li></ul>")
(define two-items '((1 "email address") (2 "phone number")))
(check-equal? (xexpr->html (rule-list two-items)) result)))
当我 运行 测试时,我在第二次测试中得到以下错误:
txexpr*: contract violation
expected: txexpr-elements?
given: '(#<void>)
我现在被难住了。如何获取要呈现的项目列表?
所以要注意的是,在某些时候你会得到一个列表列表。
(define (item-list items)
(if (empty? items)
(txexpr 'p empty '("No items to display."))
(txexpr 'ul empty
(for/list ([item items])
(quasiquote (li (unquote (cadr item))))))))
这意味着我需要正确引用规则列表并且数据结构对 txexpr
来说变得可以理解。例如,运行 一个包含两项的列表
(item-list (list '(1 "one") '(2 "two")))
得到这样的数据结构:
'(ul (li "one") (li "two"))
希望对别人有帮助。