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
相关产品推荐
相关产品推荐

