私は次のクラスを持って、そしてより多くの彼らのような:クラスのために類似のスロットを多数作成するにはどうすればよいですか?
(defclass weapon()
((base-slice-damage
:documentation "Base slice damage dealt by weapon"
:reader base-slice-damage
:initform 0
:initarg :base-slice-damage)
(base-blunt-damage
:reader base-blunt-damage
:initform 0
:initarg :base-blunt-damage)
(base-pierce-damage
:reader base-pierce-damage
:initform 0
:initarg :base-pierce-damage)))
(defclass dagger (weapon)
((base-slice-damage
:initform 3)
(base-pierce-damage
:initform 6)))
(defclass attack()
((slice-damage-dealt
:initarg :slice-damage-dealt
:reader slice-damage-dealt)
(blunt-damage-dealt
:initarg :blunt-damage-dealt
:reader blunt-damage-dealt)
(pierce-damage-dealth
:initarg :pierce-damage-dealt
:reader pierce-damage-dealt)))
あなたが見ることができるように、繰り返しがたくさんあります。 2つのクラスについて、私のスロットはすべて同じオプションを持ち、スライス、ブラント、またはピアスのいずれかによってのみ異なります。
私は属性クラスを定義するためにマクロを使用して、ちょうどのものを混合について考えてきましたこれは、私がこれまで持っているものです。
(defmacro defattrclass (attr-name &body class-options)
`(defclass ,(symb attr-name '-attr)()
((,attr-name
,@class-options))))
しかし、これは本当に十分行っておりません。
編集:私はそれを完全に満足していないのに、私は、これを作ってみた
:
(defmacro defattrclass (attr-name &body class-options)
`(defclass ,(symb attr-name '-attr)()
((,attr-name
,@class-options))))
(defmacro defattrclasses (attr-names &body class-options)
`(progn
,@(loop for attr-name in attr-names collect
`(defattrclass ,attr-name ,@class-options))))
http://www.reddit.com/r/lisp/comments/qwy5o/how_can_i_quickly_create_many_similar_slots_for_a/(それはあなたが2つの場所で質問をしている場合、明示的には良いネチケットです)。 –
ありがとう、私は気づいていない – higginbotham