加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

vector – Clojure – 为一个人定义一个数据结构

发布时间:2020-12-15 04:33:57 所属栏目:Java 来源:网络整理
导读:在其他语言中,如何创建结构是非常不言自明的.你会如何在Clojure中做这样的事情? 例如,我想添加一个人的姓名,地址和电话号码(家庭和移动电话). 我猜我想制作一个载体? 提前致谢! 解决方法 在Clojure中,您通常会使用地图来表示这种数据.你可以使用平面地图
在其他语言中,如何创建结构是非常不言自明的.你会如何在Clojure中做这样的事情?

例如,我想添加一个人的姓名,地址和电话号码(家庭和移动电话).

我猜我想制作一个载体?

提前致谢!

解决方法

在Clojure中,您通常会使用地图来表示这种数据.你可以使用平面地图:

{:first-name "Jeremy"
 :last-name "Martinson"
 :street "455 Larkspur Dr."
 :city "Baviera"
 :state "California"
 :zip 22611
 :home-phone "(555) 555-5555"
 :mobile-phone "(666) 666-6666"}

或嵌套的:

{:name {:first "Jeremy"
        :last "Martinson"}
 :address {:street "455 Larkspur Dr."
           :city "Baviera"
           :state "California"
           :zip 22611}
 :phones {:home "(555) 555-5555"
          :mobile "(666) 666-6666"}}

如果您的数据具有或多或少的静态架构并且您想要使用Clojure’s polymorphic features,则可以使用records:

(defrecord Name [first last])

(defrecord Address [street city state zip])

(defrecord Phones [home mobile])

(defrecord Person [name address phones])

(map->Person
 {:name (map->Name
         {:first "Jeremy"
          :last "Martinson"})
  :address (map->Address
            {:street "455 Larkspur Dr."
             :city "Baviera"
             :state "California"
             :zip 22611})
  :phones (map->Phones
           {:home "(555) 555-5555"
            :mobile "(666) 666-6666"})})

但是,在这种情况下,您可能只想使用地图.特别是电话记录非常难看.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读