kob*_*ris 0 eval clojure clojurescript edn
(def a (edn/read-string "(+ 1 3)"))
; => (+ 1 3)
Run Code Online (Sandbox Code Playgroud)
如何评估此结果列表?
(type (first a))
; => cljs.core/Symbol
(= (first a) '+)
; => true
Run Code Online (Sandbox Code Playgroud)
我想更一般地我将如何从符号->函数中得到。这是Clojure的正常做法吗?我似乎找不到任何东西。也许我没有搜索正确的术语。
您通常会使用eval。但是在ClojureScript中,您需要在运行时可用的编译器和标准库。仅当您使用自托管的ClojureScript时才有可能。
如果您处于自我托管的环境(例如Lumo,Planck,Replete,Klipse 等)中,那么eval就可以使用:
cljs.user=> (require '[clojure.edn :as edn])
nil
cljs.user=> (def a (edn/read-string "(+ 1 3)"))
#'cljs.user/a
cljs.user=> (eval a)
4
Run Code Online (Sandbox Code Playgroud)
否则,您可以利用cljs.js名称空间中的设施来访问自托管的ClojureScript:
cljs.user=> (require 'cljs.js)
nil
cljs.user=> (cljs.js/eval (cljs.js/empty-state)
a {:eval cljs.js/js-eval :context :expr} prn)
{:value 4}
Run Code Online (Sandbox Code Playgroud)
请注意,这样做需要一些大小方面的考虑:ClojureScript编译器将与您编译的工件一起带入目标环境,并且您还必须避免使用
:advanced,以确保整个cljs.core标准库和关联的元数据在运行时可用。
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |