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

欢迎!请查看关于页面以了解更多关于如何使用本站的信息。

+3
Clojure

user=> (eval `'())
()
user=> `'~(map identity ())
(quote ())
user=> (eval `'~(map identity ()))    ;; 预期:()
CompilerException java.lang.UnsupportedOperationException: 未知集合类型, 编译:(NO_SOURCE_PATH:5:1)
user=> (prn *e)
#error {
 :cause "未知集合类型"
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message "java.lang.UnsupportedOperationException: 未知集合类型, 编译:(NO_SOURCE_PATH:5:1)"
   :at [clojure.lang.Compiler analyzeSeq "Compiler.java" 6730]}
  {:type java.lang.UnsupportedOperationException
   :message "未知集合类型"
   :at [clojure.lang.Compiler$EmptyExpr emit "Compiler.java" 2929]}]
 :trace
 [[clojure.lang.Compiler$EmptyExpr emit "Compiler.java" 2929]
  [clojure.lang.Compiler$BodyExpr emit "Compiler.java" 5905]
  [clojure.lang.Compiler$FnMethod doEmit "Compiler.java" 5453]
  [clojure.lang.Compiler$FnMethod emit "Compiler.java" 5311]
  [clojure.lang.Compiler$FnExpr emitMethods "Compiler.java" 3843]
  [clojure.lang.Compiler$ObjExpr compile "Compiler.java" 4489]
  [clojure.lang.Compiler$FnExpr parse "Compiler.java" 3983]
  [clojure.lang.Compiler analyzeSeq "Compiler.java" 6721]
  [clojure.lang.Compiler analyze "Compiler.java" 6524]
  [clojure.lang.Compiler eval "Compiler.java" 6779]
  [clojure.lang.Compiler eval "Compiler.java" 6745]
  [clojure.core$eval invoke "core.clj" 3081]
  ;; 其他...
nil
user=> (eval `'~(map identity '(x)))
(x)


*原因:* 在空列表的情况下,编译器这里看到了一个LazySeq。我怀疑应该在堆栈中更早的位置生成一个空列表,但我还没有跟踪到那里。

3 答案

+1
参考:https://clojure.atlassian.net/browse/CLJ-1768 (由 alex+import 报告)
0 票数

评论者:timengler

在clojure 1.8版本中仍然存在

...