あるマクロを一時的に再定義しておき、後で元の定義に戻すことができます。
それにはdefine
とundefine
に良く似た、
組み込みマクロpushdef
とpopdef
を使います。
pushdef(name [, expansion]) popdef(name)
これらのマクロはスタック(stack)に似た仕組みで機能します。
pushdef
は、あるマクロを一時的に再定義します。
このときnameの前の定義は、新しい定義によって置き換えられる前に
保存されます。もし前の定義が存在しない場合は、
pushdef
はdefine
とまったく同じように機能します。
あるマクロに複数の定義が存在する場合(その中の一つだけがアクセス可能です)、
popdef
を使って一番上の定義を削除することができます。
前の定義が無い場合、popdef
はundefine
のように機能します。
define(`foo', `Expansion one.') ⇒ foo ⇒Expansion one. pushdef(`foo', `Expansion two.') ⇒ foo ⇒Expansion two. popdef(`foo') ⇒ foo ⇒Expansion one. popdef(`foo') ⇒ foo ⇒foo
define
によって、複数の定義を持つマクロを再定義したときは、
一番上の定義が新しい定義で置き換えられます。
undefine
によって定義を削除するときは、
一番上のもの一つだけではなく、すべての定義が削除されます。
define(`foo', `Expansion one.') ⇒ foo ⇒Expansion one. pushdef(`foo', `Expansion two.') ⇒ foo ⇒Expansion two. define(`foo', `Second expansion two.') ⇒ foo ⇒Second expansion two. undefine(`foo') ⇒ foo ⇒foo
pushdef
とdefn
を使えば、組み込みマクロを一時的に再定義することが
できます。
マクロpushdef
とpopdef
は引数を与えたときだけ認識されます。