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

为什么`dir`传入`(ns-name *ns*)`获取的当前命名空间时无法运行

问题原因分析
  • 核心原因是dir是Clojure的宏,不会对传入的参数进行求值,而是直接接收参数的字面形式处理
  • 你写的(dir (ns-name *ns*))传入给dir的字面参数是(ns-name *ns*),这是一个PersistentList类型的列表结构,不是符号
  • dir的内部实现会自动给传入的参数加引用(quote),最终调用底层的dir-fn时传入的是未经求值的列表'(ns-name *ns*),而dir-fn要求输入是命名空间对应的Symbol类型,因此触发类转换异常
正确用法
  • 直接传入命名空间的字面符号即可正常使用:(dir user)
  • 如果需要动态获取当前命名空间调用,直接使用dir的底层函数dir-fn即可,普通函数会对参数正常求值:(clojure.repl/dir-fn (ns-name *ns*))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:54:02