在clojure中解构地图 - 未使用的密钥

Phi*_*ord 7 clojure destructuring

我已经定义了一个采用地图的函数.我想用解构来访问这些值.但是,我还想检查是否有任何使用过的密钥.

所以,例如......

 (defun func1 [{:keys [a b c] :rest rest}]
    (println a b c)
    (println rest))

 (func1 {:a 1 :b 2 :c 3 :d 4})
Run Code Online (Sandbox Code Playgroud)

哪个会打印

 1 2 3
 4
Run Code Online (Sandbox Code Playgroud)

我想要这个的原因是,如果rest不为null,这可能是一个错误,我想发出信号.我知道:as,我可以使用.但后来我需要存储两次有效密钥列表.

我错过了什么吗?

菲尔

Cub*_*bic 6

我真的不明白你为什么想知道是否有什么东西你不关心.如果您正在尝试执行"使用这些键执行特定操作,并对其他键执行某些操作"等操作,则可以执行以下操作:

(defn func [& {:keys [a b] :as args}]
  (println a b c)
  (println (dissoc args :a :b)))

(func :a 3 :b :c 5) =>
  3 4
  {:c 5}
  nil
Run Code Online (Sandbox Code Playgroud)

如果你不得不两次提到这些关键词,你也可能会对此做些什么,但我无法想象它值得打扰.

我想要这个的原因是,如果rest不为null,这可能是一个错误,我想发出信号.

如果您是关心传递用户不正是你想要的,也许地图是不使用正确的数据结构.