2024年Clojure调查中分享您的想法!

欢迎!请参阅关于页面,了解更多关于这是如何工作的信息。

0
编译器
我正在尝试编写一个宏,该宏使用某些反射生成reify形式。

clojure.reflect生成与'java.util.Iterator>>'类似的类型符号

不幸的是,编译器不接受类型提示中的>>语法

(reify Iterable (^{:tag java.util.Iterator} iterator [this] nil)); works

(reify Iterable (^{:tag java.util.Iterator>>} iterator [this] nil)); fails
CompilerException java.lang.RuntimeException: java.lang.ClassNotFoundException: java.util.Iterator>>, compiling:(NO_SOURCE_PATH:1325)

似乎编译器应该足够理解>>以便去掉它,而不会拒绝它。这将使编写涉及类型提示和反射的正确宏变得更加容易。

我一直在使用的工作区

(defn hint
  "clojure.reflect使用尖括号标记泛型,但
   编译器不支持在类型提示中使用泛型"
  [obj tag]
  (let [tag (-> tag .toString (.replace "<>" "") symbol)]
    (with-meta obj {:tag tag}));)

2 个答案

0

评论由:bbloom

我很抱歉,我之前犯了错误。问题确实是存在的,但问题是关于数组,而不是泛型

我的解决方案已经没有用了... :-/

0
参考:https://clojure.atlassian.net/browse/CLJ-938(由bbloom报告)
...