Resolve函数在ClojureScript中抛出错误但不在Clojure中抛出错误

时间:2012-08-18 17:11:45

标签: clojure clojurescript

以下程序按照我在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

1 个答案:

答案 0 :(得分:15)

ClojureScript中不存在

resolve。事实上,ClojureScript没有Vars。

调用名称是动态构造的函数可以通过各种hack(例如使用aget和命名空间对象)来实现,但是除非导出所有相关的符号,否则这些函数会被高级编译破坏。此外,即使使用更宽松的编译设置,目前也没有人享受官方支持。