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