Clojure:使用{:keys[…]}解构并重命名
是否可以一次性分解和重命名密钥 考虑这一点:Clojure:使用{:keys[…]}解构并重命名,clojure,Clojure,是否可以一次性分解和重命名密钥 考虑这一点: (let[{:keys[response]}{:response 1}] (打印答复) 但是,如果我想将1称为我的响应,我必须执行以下操作: (let[{:keys[my response]}(clojure.set/rename-keys{:response 1}{:response:my response})] (打印我的回答) 显然,这不适用于defn解构 Clojure中是否有任何方法可以同时对键进行解构和重命名?在不使用:键的情况下使用
(let[{:keys[response]}{:response 1}]
(打印答复)
但是,如果我想将1
称为我的响应
,我必须执行以下操作:
(let[{:keys[my response]}(clojure.set/rename-keys{:response 1}{:response:my response})]
(打印我的回答)
显然,这不适用于defn
解构
Clojure中是否有任何方法可以同时对键进行解构和重命名?在不使用
:键的情况下使用解构:
(let [{my-response :response} {:response 1}]
(println my-response))
{:keys[response]}
是{response:response}
的语法糖。如果您不介意使用库,可以从tupelo.core/destruct
获得一个更强大的解构工具。以下是一个例子:
(ns tst.demo.core
(:use demo.core tupelo.core tupelo.test))
(dotest
(let [info {:a 777
:b [2 3 4]}
mania [{:a 11} {:b 22} {:c [7 8 9]}]]
(let [z ::dummy]
(destruct [info {:a z
:b [d e f]}
mania [{:a ?} BBB {:c clutter}]]
(is= z 777)
(is= [d e f] [2 3 4])
(is= a 11)
(is= BBB {:b 22})
(is= clutter [7 8 9])))))
因此,您可以看到在析构函数表达式中,符号z
、d
、e
、f
、BBB
和croot
被赋予了来自输入变量info
和mania
的相应值。特殊符号?
被解释为意味着关键字:a
创建一个符号a
,以接收值11
(let [{:keys [response]} {:response 1}
my-response response]
(println my-response))
有关更好的答案,请参阅
这个答案离问题更近了,但从技术上讲,并不是一步到位。但这并不涉及任何复杂的去结构化