gpt4 book ai didi

Clojure:IllegalArgumentException 键必须是整数

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

我有两个列表:

(def xxa ["olp" "xyz"])
(def xxb ["ulove" "alove" "holp" "sholp"])

还有一个函数尝试获取第一个列表的元素,这些元素是第二个列表的元素的一部分:

(defn in-array
[array1 array2]
(for [s1 array1 :when (some #(.contains %1 s1) array2)] s1))

(数组内 xxa xxb)应返回 [“olp”]

但我得到:

IllegalArgumentException Key must be integer  clojure.lang.APersistentVector.invoke

我不明白这是什么意思。有人能给我一些启发吗?

最佳答案

这里试图将上面的讨论变成为后来的人提供一个明确的答案。如果我错过了某些内容,请告诉我或编辑:

从原始示例开始:

user> (def xxa ["olp" "xyz"])
#'user/xxa
user> (def xxb ["ulove" "alove" "holp" "sholp"])
#'user/xxb
user> (defn in-array [array1 array2]
(for [s1 array1 :when (some #(.contains %1 s1) array2)] s1))
#'user/in-array

然后正如彼得指出的那样,额外的一组 () 会导致此错误:

user> (in-array (xxa xxb))
IllegalArgumentException Key must be integer clojure.lang.APersistentVector.invoke (APersistentVector.java:284)

其中包含的代码多于显示情况所需的代码,因此我们可以将其精简为:

user> (xxa xxb)
IllegalArgumentException Key must be integer clojure.lang.APersistentVector.invoke (APersistentVector.java:284)

这是显示问题的最小案例。如果我们更改此示例以传递预期类型,我们可以看到向量在作为函数调用时会获取一个数字并在其自身中查找该数字。

user> (xxa 1)
"xyz"

最终我们可以更正调用并获得几乎完全符合预期的输出:

user> (in-array xxa xxb)
("olp")

结果是来自 for 表达式的(惰性)序列,并且 user3166747 请求了一个向量(非惰性且随机访问),我们可以通过添加对 vec 的调用来获得该向量:

user> (defn in-array [array1 array2]
(vec (for [s1 array1 :when (some #(.contains %1 s1) array2)] s1)))
#'user/in-array

user> (in-array xxa xxb)
["olp"]

现在它完全匹配了。

关于Clojure:IllegalArgumentException 键必须是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913121/

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