请在2024年Clojure状况调查!分享您的想法。

欢迎!请参阅关于页面获取更多有关如何使用本站的信息。

+2
语法和读取器

1.8.0:

clj-rcon-test.core=> (defn- hi [as-codec & {:keys [offset] :or {:offset 0}}]
                #_=>   (println "hi"))
#'clj-rcon-test.core/hi

1.10.0:

clj-rcon-test.core=> (defn- hi [as-codec & {:keys [offset] :or {:offset 0}}]
                #_=>   (println "hi"))
Syntax error macroexpanding clojure.core/defn- at (form-init17556793069765460591.clj:1:1).
:offset - failed: simple-symbol? at: [:fn-tail :arity-1 :params :var-params :var-form :map-destructure :or 0] spec: :clojure.core.specs.alpha/or
{:keys [offset], :or {:offset 0}} - failed: simple-symbol? at: [:fn-tail :arity-1 :params :var-params :var-form :local-symbol] spec: :clojure.core.specs.alpha/local-name
{:keys [offset], :or {:offset 0}} - failed: vector? at: [:fn-tail :arity-1 :params :var-params :var-form :seq-destructure] spec: :clojure.core.specs.alpha/seq-binding-form
as-codec - failed: vector? at: [:fn-tail :arity-n :bodies :params] spec: :clojure.core.specs.alpha/param-list

clj-rcon-test.core=>

为了便于理解,这是我在尝试排查的问题:https://github.com/gpittarelli/clj-rcon/blob/master/src/clj_rcon/codecs.clj#L6

1 个答案

+5

被选中
 
最佳答案

这里的问题是,`:or`期望一个包含符号到值的映射的地图,而不是关键字到值的映射。不确定这是规范中的疏忽,还是应该从未支持

谢谢,这样解决了!
作者
在之前,这一行为是不经意允许的,现在已经变得更加严格。重要的是,在此之前,它默默地不工作。
...