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がありません。

名前が動的に構築される関数の呼び出しは、さまざまなハック(aget名前空間オブジェクトでの使用など)によって可能ですが、関連するすべてのシンボルがエクスポートされない限り、高度なコンパイルで機能しなくなることが保証されています。また、現在、より寛容なコンパイル設定を使用しても、公式サポートを享受しているものはありません。

于 2012-08-18T17:22:46.443 に答える