Java Clojure使用regexp解析/编译有多聪明?
想象一下,我有一个类似于那个的Clojure函数Java Clojure使用regexp解析/编译有多聪明?,java,regex,clojure,clojure-java-interop,Java,Regex,Clojure,Clojure Java Interop,想象一下,我有一个类似于那个的Clojure函数 (defn ABC [tag v] (let [value (->> (str/split v #",") (map str/trim) (map u/capitalize) (str/join ", "))] ...))) 该函数可以被多次调用。regexp#“,”是否只
(defn ABC
[tag v]
(let [value (->> (str/split v #",")
(map str/trim)
(map u/capitalize)
(str/join ", "))]
...)))
该函数可以被多次调用。regexp#“,”是否只解析一次(我希望如此)?有没有关于源代码/证明的要点
如果我有一个具有相同regexp的第二个函数呢。从技术上讲,它是否与第一个函数中的regexp实例相同?或者是两个独立的regexp
(defn XYZ [v]
(let [adr (str/split v #",")]
(if (> (count adr) 5)
...
)
对于函数:
(defn--xx--[](s/split“foo”#“bar”))
clj反编译器为其生成以下java:
import clojure.lang.*;
导入java.util.regex.*;
公共最终类调度程序$\uuuxx\uuuuuu扩展了一个函数
{
公共静态最终Var常量0;
公共静态最终对象常量1;
公共静态对象invokeStatic(){
返回((IFn)调度程序$\uuuuxx\uuuuu.const\uuuu 0.getRawRoot()).invoke(“foo”,调度程序$\uuuuuuxx\uuuuuuu.const\uu 1);
}
@凌驾
公共对象调用(){
返回invokeStatic();
}
静止的{
常量0=RT.var(“clojure.string”、“split”);
const__1=Pattern.compile(“bar”);
}
}
如您所见,它被编译成静态初始值设定项块中的模式。所以可以把它写成文字
第二个函数将有自己的模式
对象。如果你想分享这个实例,你应该自己分享
(def pat#“bar”)