#lang racket
(define-syntax unpack
(syntax-rules ()
[(unpack) (begin (define x 1))]))
(unpack)
(+ x 1)
为什么我会收到错误:x: unbound identifier in: x
?
定义宏后,我希望代码能够正确定义 x 且不出现错误?我似乎无法理解,这可能是语法或编译器的问题吗?
#lang racket
(define-syntax unpack
(syntax-rules ()
[(unpack) (begin (define x 1))]))
(unpack)
(+ x 1)
为什么我会收到错误:x: unbound identifier in: x
?
定义宏后,我希望代码能够正确定义 x 且不出现错误?我似乎无法理解,这可能是语法或编译器的问题吗?
宏扩展器有意以这种方式工作,以避免意外干扰
x
外部上下文。告诉扩展器您实际想要使用外部 x 的一种方法是将其传入。
另一种方式是使用来在出现的用法的相同上下文中
datum->syntax
构造标识符。x
unpack