11

以下程序在 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
4

1 回答 1

15

resolveClojureScript 中不存在。事实上,ClojureScript 没有 Vars。

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

于 2012-08-18T17:22:46.443 回答