Clojure:“java.lang.IllegalArgumentException:没有为key提供值:”当我更改require时

时间:2014-07-05 03:11:16

标签: clojure require destructuring

我的Clojure代码中有java.lang.IllegalArgumentException: No value supplied for 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)})

换句话说,我要求地图包含名为stylepoints的密钥,并且会为其提供一个包含名为stylepoints的密钥的地图。

这段代码已经好几个月了。

不同之处在于我现在使用导入sshapes/scale的{​​{1}}来调用它:

sshapes

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

进入命名空间
scale

这会导致那种错误吗?

1 个答案:

答案 0 :(得分:5)

行。我更改了代码以使用

(:require [patterning.sshapes :refer [scale rotate]])

即。使用明确命名的必需函数,lein干净,问题已经消失。函数定义本身和调用它们的代码保持不变。

怪异。