2017-10-21 75 views
2

我有一个Clojurescript程序在浏览器中运行。ClojureScript评估。如何使用包含在调用代码中的库

它导入了一些库,然后我想让用户输入一些调用这些库的小型clojurescript“胶水代码”。

我可以看到(来自https://cljs.github.io/api/cljs.js/eval)你用四个参数调用eval,第一个参数是环境状态,它是一个原子。但是,我是否可以将当前的环境与我从其他地方所需的所有功能实际转换为eval的适当参数?

更新:

我想,也许我可以使用设置为EVAL的namesspace:NS第三,选择采用地图,参数的选择。我将它设置为我的应用程序的命名空间:

:ns "fig-pat.core" 

但没有区别。

查看控制台,这绝对是它试图做了评价的情况下,但它的抱怨,在EVAL-ED代码中引用名称不认可:

WARNING: Use of undeclared Var /square 

的例子。 (方是我需要的功能它是可见的应用程序本身即无花果pat.core命名空间。)

然后我得到:

SyntaxError: expected expression, got '.'[Learn More] 

我敢承担这个失败作为一个整体评估表达。

更新2:

我猜这个问题实际上可能涉及:How can I get the Clojurescript namespace I am in from within a clojurescript program?

(println *ns*) 

只是打印零。所以也许Clojurescript不能看到自己的命名空间。

因此:ns在eval中不起作用?

回答

2

在clojurescript程序中调用eval是所谓的“自托管clojurescript”的一部分。 在自托管的clojurescript中,除非您实施解决策略,否则名称空间不可用。这意味着必须让浏览器知道如何解析命名空间,例如从cdn加载一个cljs文件。

实现名称空间正确解析并不是那么简单。 这是在load-fncljs.js namespace的文档字符串中以神秘的方式解释的。

几个工具支持命名空间在浏览器中运行的自我主机cljs解决e.g Klipsecrepl