如何用assoc函数创建Clojure示例数据库db-sample?
使用assoc创建Clojure示例数据库
首先明确:assoc的核心作用是向map中添加或更新键值对,它本身不负责创建向量,但你可以把**已经构建好的向量(包括嵌套向量、map的向量)**作为值,通过assoc绑定到对应的键上。
用assoc构建目标数据库
你可以从空map开始,一次性或分步用assoc添加各个键值对:
;; 一次性完成构建 (def db-sample (assoc {} :person [{:person/id 9 :name "rich" :surname "hickey" :join-date "04.04.2016" :experience :experience/lead :loyality-level :loyality-level/more-than-seven-years :work-type :work-type/tenure :work-time :work-time/part-time}] :employees/developer-team [{:frontend [[:person/id 1] [:person/id 2] [:person/id 3] [:person/id 4]]}]))
如果需要分步操作(比如分多次修改map),也可以拆分调用:
;; 先初始化空map并添加person数据 (def db-sample (assoc {} :person [{:person/id 9 :name "rich" ...}])) ;; 再添加团队配置数据 (def db-sample (assoc db-sample :employees/developer-team [{:frontend [...]}]))
更简便的替代方案
如果不是必须练习assoc,直接用Clojure的map字面量定义是最直观高效的方式,和你给出的示例结构完全一致(注意补全原示例中缺失的闭合括号,保证语法正确):
(def db-sample { :person [{:person/id 9 :name "rich" :surname "hickey" :join-date "04.04.2016" :experience :experience/lead :loyality-level :loyality-level/more-than-seven-years :work-type :work-type/tenure :work-time :work-time/part-time}] :employees/developer-team [{:frontend [[:person/id 1] [:person/id 2] [:person/id 3] [:person/id 4]]}] })
内容的提问来源于stack exchange,提问作者Barış Can Ateş
相关产品推荐
相关产品推荐

