在Dmitri Sotnikov的博客文章中(链接),提供了一个名为
eval-str
的函数,可以运行包含ClojureScript代码的字符串。(defn eval-str [s]
(eval (empty-state)
(read-string s)
{:eval js-eval
:source-map true
:context :expr}
(fn [result] result)))
如果我有一些函数x
,希望能够从eval字符串内部调用该函数,我该如何做?
cljs.js/eval
的命名空间不同)。虽然可能有一种自定义方法将其传递给cljs.js/eval
,但另一种方法是在执行此类代码之前评估require
(或ns
)表单(或直接使用cljs.js/require
)。如果所需的命名空间已经编译,则cljs.js/*load-fn*
支持传回编译的 JavaScript 和相关分析缓存。 - Mike Fikes'(require ...)
加入编译器状态非常好用。不确定这是否能通过高级编译,但会找出答案的。谢谢!这里有一个相对简单的示例可供需要的人使用: https://github.com/chr15m/speccy/blob/957f7cbcb8b51cfb3d92616df15a1384d15d3517/src/speccy/core.cljs#L35-L47(请注意第38行的require)。 - Chris McCormick:simple
的优化兼容。 - Mike Fikes