首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将关键字作为可以传递到更新中的参数传递?

如何将关键字作为可以传递到更新中的参数传递?
EN

Stack Overflow用户
提问于 2018-10-23 05:50:54
回答 2查看 171关注 0票数 0

关于以下职能:

代码语言:javascript
复制
(defn update-map [state key1 key2] 
    (update-in state [key1 key2] update-fn)
)

如果我用以下方式调用该函数:

代码语言:javascript
复制
(update-map state :somekey :otherkey)

我收到一个空指针。

但是,如果我在REPL上运行函数内部的相同代码,或者将传递给update-in函数的参数替换为硬关键字,那么它运行得非常完美。

如何将关键字作为可以传递到更新中的参数传递?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 06:48:52

我猜您在某个地方有一个(def state ...),并且混淆了函数中的本地state和全局state变量。这段代码显示了正在发生的事情:

代码语言:javascript
复制
(defn update-fn [some-map key1 key2]
  (update-in some-map [key1 key2] inc ))

(def data {:k1 {:k2 42}})

(update-fn data :k1 :k2) => {:k1 {:k2 43}}

因此,它可以按需要工作。如果它仍然不适合您,那么您需要更新您的问题,并展示state是如何定义的。

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 04:34:02

状态或更新-fn都未定义。

您可以改进您的功能,使用&获取任意数量的关键字。

代码语言:javascript
复制
(defn update-map [state & ks]
  (update-in state ks update-fn))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52941956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档