我想做一些类似于此的事情:
(defstruct person
real-name
(fake-name real-name)) ;if fake-name not supplied, default to real-name
Run Code Online (Sandbox Code Playgroud)
但是,Common Lisp说The variable REAL-NAME is unbound.如何让构造函数按顺序评估它的参数(就像我可以使用函数关键字参数),或者我应该如何做得更好呢?
Dir*_*irk 10
一种方法是:
(defstruct (person
(:constructor make-person (&key real-name
(fake-name real-name))))
real-name
fake-name)
Run Code Online (Sandbox Code Playgroud)
您基本上可以根据需要定制构造函数,包括
make-xxx考虑
(defstruct (person
(:constructor make-person (real-name
&optional (fake-name real-name))))
real-name
fake-name)
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用&auxlambda-list关键字初始化构造的字段:
(defstruct (person
(:constructor make-person (real-name
&aux (fake-name (format nil
"fake-of-~A"
real-name)))))
real-name
fake-name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
608 次 |
| 最近记录: |