Clojure destructuring 学习记录

阎庆
2023-12-01

在看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 {
   
 类似资料: