You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在评估Clojure宏时获取调用方的源码位置?

在Clojure宏中获取调用方的源码位置

要在Clojure宏内部拿到调用该宏的代码所在的源文件、行号和列号,直接用宏的隐式参数&form就能搞定——它能提供当前宏调用的语法对象,从中提取位置元数据即可。

示例代码如下:

(defmacro my-macro []
  (let [{:keys [file line column]} (meta &form)]
    `(prn (str "调用位置:文件 " ~file ",行号 " ~line ",列号 " ~column))))

简单说明

  • &form是Clojure宏自带的隐式参数,代表当前宏调用的语法形式
  • 通过(meta &form)可以获取这个语法形式的元数据,里面包含:file(源文件路径)、:line(行号)、:column(列号)这些位置信息
  • 把这些信息注入到宏展开后的代码里,调用宏时就会打印出调用方的具体位置

比如你在demo.clj的第8行调用这个宏:

(my-macro)

运行后会输出类似这样的内容:
"调用位置:文件 demo.clj,行号 8,列号 1"

内容的提问来源于stack exchange,提问作者Witek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:50:54