当前位置:  开发笔记 > 编程语言 > 正文

我可以参考defstruct中的其他插槽吗?

如何解决《我可以参考defstruct中的其他插槽吗?》经验,为你挑选了1个好方法。

在常见的lisp我注意到我可以这样写:

(defun foo (&key (a 1) (b 2) (c (+ a b))) (print (+ a b c)))

当我打电话时(foo),6打印出来.所以参数c可以引用为a和设置的值b.但我似乎找不到办法做类似的事情defstruct.就像是:

CL-USER> (defstruct thing a b c)
THING
CL-USER> (setq q (make-thing :a 1 :b 2 :c (+ a b)))
; Evaluation aborted
CL-USER> (setq q (make-thing :a 1 :b 2 :c (+ :a :b)))
; Evaluation aborted

有没有办法做到这一点?



1> fionbio..:

您可以使用:constructor选项执行此操作defstruct.

CL-USER> (defstruct (thing
                      (:constructor make-thing (&key a b (c (+ a b)))))
           a b c)
THING
CL-USER> (make-thing :a 1 :b 2)
#S(THING :A 1 :B 2 :C 3)

有关详细信息,请参阅CLHS条目defstruct.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有