2013-12-16 46 views
6

我正在寻找将类型添加到clojure地图的最轻方法 我知道我可以使用记录来做到这一点,但我想知道如果我可以做到这一点与普通地图在clojure中添加类型到地图的最简单方法

我有一个函数来创建一个映射,代表一个人:

(defn person [first-name last-name] {:first-name first-name :last-name last-name}) 

我想能够做这样的事情:

(def wayne (person "Wayne" "Shorter")) 
.... 
(type wayne) 
=> person 

回答

7

你可以ATTAC h一些metadata

(defn person [first-name last-name] 
     (with-meta {:first-name first-name :last-name last-name} 
       {:type 'Person})) 

(def wayne (person "Wayne" "Shorter")) 

(type wayne) ;; Person 
+0

如果OP真的只想要一种方式来_tag_某些值,这里是惯用的解决方案恕我直言。做得好! :) – xsc

相关问题