阿小信大人的头像
做你说过的,说你能做的 阿小信大人

Clojure中defstruct、deftype和defrecord使用区别2016-05-17 16:43

defstruct

user=> (defstruct Point1 :x :y)
#'user/Point1
user=> (def p1 (struct-map Point1 :x 3 :y 4))
#'user/p1
user=> (prn p1)
{:x 3, :y 4}
nil
user=> (prn (:x p1))
3
nil
user=> (prn (struct-map Point1 3 5))
{:x nil, :y nil, 3 5}
nil

deftype

user=> (deftype Point2 [x y])  ; 创建了一个java类
user.Point2
user=> (def p2 (Point2. 8 9))  ; 注意‘.’ 构造函数(new Point2)
#'user/p2
user=> (prn p2)
#<Point2 user.Point2@27485e6>
nil
user=> (prn (:x p2))  ; 不起作用
nil
nil
user=> (prn (.x p2))
8
nil

defrecord

user=> (defrecord Point3 [x y])  ; 创建了一个map
user.Point3
user=> (def p3 (Point3. 11 12))
#'user/p3
user=> (prn p3)
#user.Point3{:x 11, :y 12}
nil
user=> (prn (:x p3))  ; 起作用
11
nil
user=> (prn (.x p3))  ; 仍然起作用
11
nil

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Clojure#  
分享到:
阅读[892] 评论[0]

本文最近访客

发表评论