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

如何在Clojure中扩展record类型以实现str函数?

自定义Clojure Record的字符串转换行为

你可以通过扩展clojure.core/print-method多方法实现需求——Clojure的str函数处理对象时会调用该方法生成字符串表示,为Book类型实现这个方法后,就能直接用str得到自定义格式的结果。

修改后的代码示例

(defrecord Book [title author])

(defn book->string [book] (str (:title book) " by " (:author book)))

;; 为Book类型实现print-method方法
(defmethod clojure.core/print-method Book [book writer]
  (.write writer (book->string book)))

;; 现在直接调用str即可得到目标结果
(str (->Book "Foo" "Bar"))  ;; 输出 "Foo by Bar"

说明

  • print-method是Clojure负责对象打印的核心多方法,str、println等函数都会依赖它生成对象的字符串形式。
  • 实现时需要接收两个参数:目标对象(这里是Book实例)和一个Writer对象,我们只需要把自定义格式的字符串写入这个Writer即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:27:38