Racket 如何在使用语法/解析匹配文本时忽略绑定
在Racket 如何在使用语法/解析匹配文本时忽略绑定,racket,Racket,在语法分析中我们可以使用,但这需要考虑绑定。具体来说,它“将任何无标识符的标识符=?与文字id匹配”。我想忽略绑定。具体地说,我想匹配任何一段语法x,以便(equal?(syntax-ex)'一些数据)。在下面的示例中,我希望语法分析能够成功,即使bar具有不同的绑定信息: #lang racket (module m racket (provide foo) (require (for-syntax syntax/parse)) (define-syntax (foo stx)
语法分析中
我们可以使用,但这需要考虑绑定。具体来说,它“将任何无标识符的标识符=?与文字id匹配”。我想忽略绑定。具体地说,我想匹配任何一段语法x
,以便(equal?(syntax-ex)'一些数据)
。在下面的示例中,我希望语法分析能够成功,即使bar
具有不同的绑定信息:
#lang racket
(module m racket
(provide foo)
(require (for-syntax syntax/parse))
(define-syntax (foo stx)
(syntax-parse stx
[(_ (~literal bar) x)
#'x])))
(require 'm)
(define bar 1)
(foo bar 2)
这可能吗?似乎
(~literal bar#:phase-999)
是可行的,但我对phase了解得不够,不知道这有多可靠。多亏了Alex Knauth的评论。正确的答案是使用:“~datum表单有助于象征性地识别标识符,而~literal表单通过绑定识别标识符。”在文档中~literal
下面,您应该可以找到。我想这正是您所描述的您想要的:(~datum bar)
谢谢!我怎么会错过呢?如果你加上它作为回答,我会接受的。