在球拍中找到模块的名称?
Find a module's name in racket?
如何获取Racket中当前模块的名称?
正在尝试编写需要当前模块名称的宏。
当前模块名称不能直接用于宏,因为模块只有在评估声明时才真正获得它的名称,而不是在扩展模块时。所以你不应该依赖于在编译时知道模块的名称。
相反,当模块为 运行 时,宏可以扩展为获取模块名称的代码,使用 #%variable-reference
and variable-reference->module-source
。例如:
(define-syntax-rule (whereami)
(variable-reference->module-source (#%variable-reference)))
#%variable-reference
形式是一种特殊的反射,其计算结果为包含有关封闭模块信息的值。 “封闭”是指 #%variable-reference
表达式出现在扩展代码中的位置,而不是定义宏的位置。
如何获取Racket中当前模块的名称?
正在尝试编写需要当前模块名称的宏。
当前模块名称不能直接用于宏,因为模块只有在评估声明时才真正获得它的名称,而不是在扩展模块时。所以你不应该依赖于在编译时知道模块的名称。
相反,当模块为 运行 时,宏可以扩展为获取模块名称的代码,使用 #%variable-reference
and variable-reference->module-source
。例如:
(define-syntax-rule (whereami)
(variable-reference->module-source (#%variable-reference)))
#%variable-reference
形式是一种特殊的反射,其计算结果为包含有关封闭模块信息的值。 “封闭”是指 #%variable-reference
表达式出现在扩展代码中的位置,而不是定义宏的位置。