gpt4 book ai didi

clojure - 在Clojure中建立匿名功能的 map

转载 作者:行者123 更新时间:2023-12-04 13:47:50 25 4
gpt4 key购买 nike

我只是在学习语言,并且有一个简单的问题。为什么这样做(构造{:key "value"}):

(#(assoc {} :key %) "value")

但这不是:
(#({:key %}) "value")
ArityException Wrong number of args (0) passed to: PersistentArrayMap clojure.lang.AFn.throwArity (AFn.java:429)

在Python上,后一种语法非常有效:
> (lambda v: {'key': v})('value')
{'key': 'value'}

编辑:感谢出色的答案,很明显,我需要停止将 #等同于Python中的 lambda了。

最佳答案

读者可以将#(f %)扩展为(fn [%] (f %)。同样,#({:key %})扩展为(fn [%] ({:key %})。相当于python的是lambda v: {'key': v}(),它与Clojure版本具有完全相同的问题。

您正在寻找的是等效于(fn [v] {:key v})的东西。如果您确实想使用#(...)表示法,则可以使用#(do {:key %})

顺便说一句,我个人从不使用#(...)。我认为比较难理解(例如该证据的示例),并且仅比等效的fn格式紧凑得多。然后还有一个限制,即不能嵌套#(...)形式。

关于clojure - 在Clojure中建立匿名功能的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734468/

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