gpt4 book ai didi

racket - 重命名 DrRacket 中派生名称的支持

转载 作者:行者123 更新时间:2023-12-01 23:44:53 24 4
gpt4 key购买 nike

当宏使用派生名称生成绑定(bind)时,这些不会被视为对原始名称的引用(这是预期的行为)。但是,重命名不适用于派生名称。

这是一个简单的宏示例:

(define-syntax (my-syntax stx)
(syntax-case stx ()
[(_ name)
(with-syntax ([get-name (format-id #'name "get-~a" #'name)])
#'(begin
(define name 42)
(define (get-name) name)))]))

在下面的代码中,通过 右键单击 → Rename foo 将第一行的 foo 重命名为 bar 正确地重命名了第二行的 foo行,但未能在第三行重命名 get-foo

(my-syntax foo)
foo
(get-foo)

例如,是否有某种语法属性可以附加到 fooget-foo 以提供重命名助手(可以生成原始列表/重命名对)?

作为最后的手段,我可​​以使用一个固定的约定,并使用阅读器扩展在早期将 get-foo 实际扩展为 (get foo),尽管我我不确定这是否可行。

最佳答案

这是一个很好的问题。

我从 DrRacket 的作者那里得到了提示。'sub-range-binders 属性应该可以解决问题:

http://docs.racket-lang.org/tools/Check_Syntax.html?q=sub-binder#%28idx._%28gentag.28.%28lib._scribblings%2Ftools%2Ftools..scrbl%29%29%29

关于racket - 重命名 DrRacket 中派生名称的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com