有没有办法在Clojure的运行时序列化函数?我希望能够通过串行格式发送无状态(但不是纯粹的)函数(可能是edn,但我对任何东西都是开放的)。如何在Clojure中运行时序列化函数?
例如...
如果我在一个功能运行prn-str
,我没有得到我预期/希望。
user=> (def fn1 (fn [x] (* x 2)))
#'user/fn1
user=> (def data {:test 1 :key "value"})
#'user/data
user=> (defn fn2 [x] (* x 2))
#'user/fn2
user=> (prn-str fn1)
"#object[user$fn1 0x28b9c6e2 \"[email protected]\"]\n"
user=> (prn-str data)
"{:test 1, :key \"value\"}\n"
user=> (prn-str fn2)
"#object[user$fn2 0x206c48f5 \"[email protected]\"]\n"
user=>
我本来想把/预期的是这样的:
user=> (prn-str fn2)
"(fn [x] (* x 2))\n"
或者,也许,
user=> (prn-str fn2)
"(defn fn2 [x] (* x 2))\n"
在repl。 '(来源fn2)'。挖掘几个级别,复制以获取字符串版本的源代码可以看到'(println(clojure.repl/source-fn'clojure.repl/source-fn))''。乍一看,它看起来很不透明,但也许可以修改为给出一个可串行化版本的func。我的猜测是不会在最一般的情况下工作。 –