以下程序按照我在Clojure中的预期工作,但在ClojureScript中抛出错误。我想知道这是一个错误还是ClojureScript中没有这个功能,或者我需要重新考虑我试图这样做的方式。非常感谢您的帮助。
; Clojure...
(defn foo [x] x)
(defn foobee [x] (str (foo x) "bee"))
(println
((resolve (symbol (str "foo" "bee"))) "bizzee"))
;=> bizzeebee
; ClojureScript...
(defn foo [x] x)
(defn foobee [x] (str (foo x) "bee"))
(.log js/console
((resolve (symbol (str "foo" "bee"))) "bizzee"))
;=> Exception in thread "main" java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol
答案 0 :(得分:15)
resolve
。事实上,ClojureScript没有Vars。
调用名称是动态构造的函数可以通过各种hack(例如使用aget
和命名空间对象)来实现,但是除非导出所有相关的符号,否则这些函数会被高级编译破坏。此外,即使使用更宽松的编译设置,目前也没有人享受官方支持。