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

Clojure打印结果出现#object前缀而非目标值,该如何修正?

问题解答

#object前缀的含义

这是Clojure打印JVM对象时的标准输出格式,结构为#object[类名 内存哈希值 对象toString结果],你遇到的输出里的这段内容,就是Clojure内置str函数本身的对象表示。

错误原因

你的代码写错了函数调用的括号结构:
原代码中(println str(clojure.string/replace value lexicon replacementValue)一行,相当于给println传入了两个参数:

  • 第一个参数是str函数本身的对象
  • 第二个参数是clojure.string/replace执行后得到的正确替换结果字符串
    println会按顺序打印所有传入的参数,中间用空格分隔,因此才会出现多余的对象前缀。

修复方案

方案1:删除多余的str调用

clojure.string/replace执行后本身就会返回字符串类型的结果,不需要额外用str转换,直接传入println即可:

(defn replace-lexicon [value lexicon replacementValue]
  (println (clojure.string/replace value lexicon replacementValue)))
  
(replace-lexicon "this.is.a.test" "." " ")

方案2:修正str的调用括号

如果后续需要用str做额外字符串处理的场景,需要把str的整个调用逻辑包裹在括号内,作为println的唯一参数:

(defn replace-lexicon [value lexicon replacementValue]
  (println (str (clojure.string/replace value lexicon replacementValue))))
  
(replace-lexicon "this.is.a.test" "." " ")

两种方案执行后都会输出预期结果:

this is a test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:00:02