でDSLを作成するために、どのように私はこのような何かを探してelispの中にDSLを作成したい:elispのは、グローバルな名前空間を持っているので、しかしelispの
(install
;; do install
)
(uninstall
;; do uninstall
)
を、これは良いアイデアではありません。そして、このような関数の接頭辞は、あまりにも醜いです。
(commands
(install
;; do install
)
(uninstall
;; do uninstall
)
;; ...
)
をしかし、私はしたくないので、グローバル名前空間にとアンをインストール:
(package-install
;; do install
)
(package-uninstall
;; do uninstall
)
は、だから私はこのように呼んで、すべてのコマンドは、コマンドに包まれる可能性が妥協案として考え私は何らかの理由でコマンドマクロ内でコマンドのすべての出現を例えば次のようなプレフィックス名に置き換えなければなりません:
これはこのようなハックのようです。さらに、ネストされたコマンドがあれば動作しません。
これにはどんな良い解決策がありますか?
ありがとうございます!
YASnipperは関数に 'yas /'を付けるので、 'yas/expand'などとなります。私はそれがまったく醜いとは思わなかった。私が書いたtfs統合のためのコンベンションを採用したので、 'tfs/checkout'、' tfs/add'などがあります。これは正式なサポートがない場合、名前スコープを行うための安価で簡単な方法です。 – Cheeso
文法の注釈: 'command'マクロの定義と同じように' setcar'/'setcdr'を使用しません。新しいコンスを作成してください(これはコードをきれいにします)。マクロエクスパンダが任意の方法で元のコードツリーを破壊的に変更した場合、どのような影響があるかわかりません。 – Dirk