在其他语言中,如何创建结构非常不言自明。您如何在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"})})

但是,在这种情况下,您可能只需要一张地图。该Phones记录尤其难看。

关于vector - Clojure-为人定义数据结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36818692/

10-09 00:16
查看更多