我可以创建宏以便我可以用s-
调用sequence-
函数?因此,我应该可以写s-length
,s-filter
和s-map
而不是sequence-length
,sequence-filter
和sequence-map
。谢谢。用于重命名序列功能的宏
1
A
回答
3
您可以使用racket/require
的filtered-in
执行此类转换。这里有一个简单的例子:
#lang racket
(require racket/require
(filtered-in (λ (name) (regexp-replace #rx"^sequence-" name "s-"))
racket/sequence))
(s-ref '(1 2 3) 1)
如果你发现自己经常使用这样的事情,它不会太难写一个require transformer将扩大到filtered-in
:
#lang racket
(require (for-syntax racket/require-transform
syntax/parse)
racket/require)
(define-syntax reprefix-in
(make-require-transformer
(syntax-parser
[(_ original-prefix:id new-prefix:id require-spec:expr ...)
#:with replacer (string-append "^" (regexp-quote (symbol->string (syntax-e #'original-prefix))))
#:with replacement (symbol->string (syntax-e #'new-prefix))
(expand-import #'(filtered-in (λ (name) (regexp-replace (regexp 'replacer) name 'replacement))
(combine-in require-spec ...)))])))
那么你可以这样使用它:
(require (reprefix-in sequence- s- racket/sequence))
(s-ref '(1 2 3) 1)
1
是的。翻译cludgyness的水平。
但是,我强烈建议您的做法是使用rename-in
在导入时重命名这些函数中的每一个。因此,例如,你的代码看起来像:
#lang racket
(require (rename-in racket/sequence
[sequence-length s-length]
[sequence-map s-map]
[sequence-filter s-filter]
...))
还有其他更先进的方法可以做到这一点,不要求你明确列出每个标识符,使用module->exports
,regexp-match
,format-id
和make-require-transformer
。但是这对我来说似乎很脆弱,你最好明确你想要重命名的名字。
相关问题
- 1. 宏重命名多个功能于一体
- 2. 重命名使用VBA /宏
- 3. Resharper重命名功能类似于Visual Studio重命名 - 是否有可能?
- 4. 重命名Azure功能
- 5. 如何设置用于重命名标签的功能键(f2)
- 6. PHP重命名功能不起作用
- 7. 在PHP中使用重命名功能
- 8. 使用格式化功能命名列
- 9. EMF资源的重命名功能
- 10. 用于网页扫描的宏功能
- 11. 命名的列重命名
- 12. PHP重命名功能问题
- 13. 变量在重命名功能
- 14. MySQL的:对于重命名的列
- 15. 功能命名:ActionIfCondition()
- 16. 不能重命名为“复制”一列,可能是由于CDC
- 17. 如何获取宏功能的名称?
- 18. 重命名列
- 19. 重命名列
- 20. Excel宏创建命名基于现有的列表
- 21. 复选框在Excel宏中重命名
- 22. 在dplyr中的重命名功能不起作用
- 23. Mysql使用重命名列
- 24. 使用resample重命名列
- 25. 如何获得列名基于功能
- 26. 的JavaScript重定向序列功能
- 27. 为什么我不能重命名列?
- 28. 功能,创建宏作为参数提供的宏名称
- 29. 序列的功能应用
- 30. 难度命名功能
这应该放在一个库的某个地方吗? –
@AlexKnauth可能。把它用在'racket/require'中可能是有道理的,但是我一直不愿意给'base'添加新东西,因为它是唯一的(明显)不能用于旧版Racket版本的包。我不确定在一个单独的软件包中使用它会带来多大的意义,但是对于我所写的一些其他需求/提供的变压器,这可能会更有价值。 –