我有一个向量s
和字符串x
:
(def s [5 6 7])
(def x "echo %1 %2 %3")
我想将%n
中的x
转换为值s[n-1]
以生成:
echo 5 6 7
我该怎么做?我到目前为止最远的是:
(clojure.string/replace code #"%(\d)" (s "$1"-1))
但这显然不起作用。
答案 0 :(得分:2)
clojure.string/replace
函数的替换参数可以是字符串,也可以是匹配模式并返回字符串的函数。在这种情况下,它应该是一个函数如下。
user> (def s [5 6 7])
#'user/s
user> (def x "echo %1 %2 %3")
#'user/x
user> (defn replacement [match] (-> match second Long/parseLong dec s str))
#'user/replacement
user> (clojure.string/replace x #"%(\d)" replacement)
"echo 5 6 7"
replacement
函数采用两个字符串的向量,因为每个匹配都是一个字符串向量。
user> (re-seq #"%(\d)" "echo %1 %2 %3")
(["%1" "1"] ["%2" "2"] ["%3" "3"])