Clojure 克洛朱尔:“我不知道;java.lang.IllegalArgumentException:没有为键“提供值”;当我改变要求时

Clojure 克洛朱尔:“我不知道;java.lang.IllegalArgumentException:没有为键“提供值”;当我改变要求时,clojure,require,destructuring,Clojure,Require,Destructuring,我在Clojure代码中得到了一个java.lang.IllegalArgumentException:没有为key:提供值 我知道这就是当我试图对作为参数传递的映射中的键进行分解时发生的情况 然而,奇怪的是,在相同的数据下,这个函数多年来一直运行良好。唯一不同的是我现在如何导入函数 以下是错误: Caused by: java.lang.IllegalArgumentException: No value supplied for key: {:style {:color [255 150

我在Clojure代码中得到了一个
java.lang.IllegalArgumentException:没有为key:
提供值

我知道这就是当我试图对作为参数传递的映射中的键进行分解时发生的情况

然而,奇怪的是,在相同的数据下,这个函数多年来一直运行良好。唯一不同的是我现在如何导入函数

以下是错误:

Caused by: java.lang.IllegalArgumentException: No value supplied for key: 
{:style {:color [255 150 150 255], :stroke-weight 2}, :points [[-1 0] [0 -1] [1 0] [0 1] [-1 0]]}
这是抛出它的函数

(defn scale
  [val {:keys [style points]}]
  {:style style
   :points (scale-shape val points)})
换句话说,我要求地图包含名为
style
points
的键,并给它一个包含名为
style
points
键的地图

这个代码已经运行了好几个月了

不同之处在于,我现在使用
sshapes/scale
调用它,其中
sshapes
是通过以下方式导入的:

 (:require [patterning.sshapes :as sshapes])
而之前我只是将其称为
scale
,其中scale使用

 (:require [patterning.sshapes :refer :all])

这会导致这种错误吗

好的。我把代码改成了

(:require [patterning.sshapes :refer [scale rotate]])
例如,使用显式命名的必需函数,对lein进行了清理,问题就消失了。函数定义本身和调用它们的代码保持不变


奇怪。

有没有可能:refere:all正在引入您以前使用的另一个函数?(例如,
scale shapes
?)既然没有引入另一个函数,那么您可能正在使用来自不同名称空间的同名函数,并且它没有以
sshapes/scale
所期望的格式生成某些内容。好主意。不可能完全是这样,但在我的重写过程中,我可能混淆了对低级比例形状的调用和这个比例函数。虽然这很奇怪,因为错误消息似乎暗示我正在使用正确的键发送映射。您提供的代码不足以了解发生了什么-异常来自程序中的其他地方,可能是在任何函数调用
scale
中。如果您需要调试错误消息的帮助,请包含相关代码或至少完整的堆栈跟踪。@amalloy它确实来自该函数。是否有一个我们可以运行的代码段可靠地再现该错误?