在看metabase 代码时候,可以看到很多类似如下的代码
(let [{:keys [args body arg->schema], :as defendpoint-args}
看的似懂非懂的,于是去google,仔细阅读https://clojure.org/guides/destructuring ,总结如下:
- 对应map类variable{},可以在任意地方进行destructuring,包括let及函数参数中
- 有如下关键字:as,:or , :strs,:keys:syms
- 可以在destructuring 时候只保留部分内容
关键字说明如下
- :as 将整个map作为一个variable,主要用于rename和有做部分destructuring的情况
- :or 当map中某个key不存在时候,提供default值
- :keys 取出指定keys到variables中,主要map必须是:开头的key
- :strs 将map中的奇数对象(String key)作为key,取出偶数的对象作为value
- :syms 和strs类似,不过是取’ - Quote的奇数对象(quote key)
- :syms,:keys,:strs不能混用
as、or及keys 测试代码如下:
(def john-smith {