構造体 Emacs EmacsLisp
構造体の定義
cl-defstruct
を使って構造体を定義すると make-[構造体名]
というファクトリが使えるようになる。
(cl-defstruct person first-name last-name age sex) (make-person :first-name "John" :last-name "Doe" :age 30 :sex "male")
#s(person "John" "Doe" 30 "male")
スロットの値の取得
構造体に紐付いた値が格納される場所をスロットという。
構造体の定義時に [構造体名]-[スロット名]
という関数も同時に使えるようになっていて、
この関数を使って各スロットの値を取得する。
first-name
を取得。
(person-first-name p)
John
age
を取得。
(person-age p)
30
構造体判定用の関数 [構造体名]-p
も使えるようになる。
(person-p p)
t
(unless (person-p '(John Doe 30 male)) "Not Person")
Not Person
スロットの値の更新
setf
を使ってスロットの値を更新する。
(setf (person-last-name p) "Smith") p
#s(person "John" "Smith" 30 "male")