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

使用clojure.string/split时遭遇ClassCastException异常排查

解决Clojure中clojure.string/split引发的ClassCastException问题

问题场景

使用Clojure的Hiccup构建HTML、Garden构建CSS开发网站时,尝试从文件路径(如markdown/posts/test-post01.md)提取文件名作为跳转路径(期望得到/test-post01),运行时抛出java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.regex.Pattern错误。

错误原因

该异常是因为clojure.string/split或clojure.string/replace的参数类型不匹配:这两个函数的第二个参数要求是正则表达式(Pattern类型,通过#""语法定义),若传入普通字符串或参数传递错位,就会触发类型转换错误。

你尝试的第二种写法存在括号拼写错误,导致正则表达式#".md"被错误传入last函数,而非string/replace的参数位,这是直接引发错误的原因。

正确解决方案

修正括号后的基础写法

调整括号位置,确保参数传递到对应函数:

{:href (string/replace (last (string/split (:location post) #"/")) #".md" "")}

链式调用的优化写法

如果偏好->>链式调用让代码更清晰,原始逻辑本身没问题,确保参数传递正确即可(若之前运行出错,可检查(:location post)是否被Cheshire正确解析为字符串):

{:href (->> (:location post)
            (string/split #"/")
            last
            (string/replace #".md" ""))}

若要保证跳转路径以/开头,直接拼接即可:

{:href (str "/" (->> (:location post)
                     (string/split #"/")
                     last
                     (string/replace #".md" "")))}

验证注意事项

  • 确认all-posts.json中的location字段被Cheshire解析为字符串类型
  • 检查函数调用的括号是否完全匹配,避免参数错位

内容的提问来源于stack exchange,提问作者Elías

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:53:12