gpt4 book ai didi

java - Clojure:定义模式中的 HashMap 和数组映射类型冲突

转载 作者:行者123 更新时间:2023-12-02 02:19:52 25 4
gpt4 key购买 nike

我正在开发 Clojure API,但遇到了本地图内的项目计数发生变化时 Clojure 在 HashMapArrayMap 之间自动“类型切换”的问题。

阅读文档:https://clojuredocs.org/clojure.core/array-map#example-57392e25e4b071da7d6cfd0c

假设我有一个像这样的 POST 请求:

  (POST "/" []
:body [foo FooSchema]
(create-response ok {:message "foo!"}))

FooSchema 定义如下:

(def ArrayMap clojure.lang.PersistentArrayMap)

(def Bar ArrayMap)

(s/defschema FooSchema
{:id s/Str
:bar Bar})

:bar 作为 JavaScript 对象发送,其结构如下:

{
id: 1,
fh: 1,
rdstr: "flying"
}

如文档中所述,如果 :bar 对象在 body 中返回的项目少于 9 个,那么它将生成 ArrayMap,这可以正常工作。无论如何,当:bar对象缩放并返回超过9个项目时,请求失败,返回错误:

(not (instance? clojure.lang.PersistentArrayMap a-clojure.lang.PersistentHashMap))

因为 :bar 自动(神奇地)切换到 HashMap

反之亦然,如果我将 :bar 的架构类型设置为 HashMap,那么少于 9 个项目的对象也不起作用。

无论如何,我们总是可以强制类型为HashMap

最佳答案

这两种类型都过于具体。您应该使用更通用的类型,表示任何类似 map 的内容。显而易见的选择是 clojure.lang.IPercientMap

关于java - Clojure:定义模式中的 HashMap 和数组映射类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com