我有以下愚蠢的测试:
(define-syntax a
(lambda (stx)
(syntax-case stx ()
[(k e s) #'(let ((show display)) (e s))])))
(a show "something")
为什么这不起作用? (DrRacket中显示的错误是expand: unbound identifier in module in: show
。
但是,以下内容可以起作用:
(define-syntax a
(lambda (stx)
(syntax-case stx ()
[(k e s)
(with-syntax ((show (datum->syntax #'k 'show)))
#'(let ((show display)) (e s)))])))
(a show "something")
然后为什么?
答案 0 :(得分:2)
show
标识符,一个由宏绑定,一个不同的一个来自顶层使用(并且是未绑定的)。 OTOH,在第二种情况下,您正在使用用户代码的词汇上下文创建show
。