我需要使用Clojure删除字符串(eq_code)末尾的某些内容。 我想实现由变量(获取向量[3 1])初始化的正则表达式。
也许宏会对我有帮助。
这是代码:
(reset! atom_code (clojure.string/replace eq_code #(str (get-in vector [3 1])) ""))
错误是:
IllegalArgumentException Invalid match arg: project.core$interpreted_lang_while$fn__4457@7ac4b7c5 clojure.string/replace (string.clj:102)
有没有一种方法可以在不使用宏的情况下替换子字符串? 例如,使用返回正则表达式的函数。
答案 0 :(得分:3)
https://clojuredocs.org/clojure.string/replace
replace
匹配参数(第二个arg)不能是一个函数。
解决方案是根据动态值构造模式:
user> (def data [["a" "b"] ["c" "d"]])
#'user/data
user> (clojure.string/replace "mama" (re-pattern (get-in data [0 0])) "")
"mm"
还有:vector
是核心功能,因此请尽量不要将其用作var名称(尽管实际上这并不是解决方案的问题)
答案 1 :(得分:0)
我认为问题在于vector
是clojure函数,并且我猜测您有一些名为vector
的数据导致了编译器的混乱。
能否请您使用示例数据和所需的输出来更新您的问题?