在球拍中找到模块的名称?

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 表达式出现在扩展代码中的位置,而不是定义宏的位置。