私はパッケージのAPIをかなり頻繁に変更していますが、完了時にすべての定義済みシンボルを(必要に応じて)company-mode
プルします。バインドされていない名前を誤って使用したくないので、たとえば、で始まるすべての変数と関数のバインドを解除するにはどうすればよいですか?この後、再びできるようになります。my-package-
load-file
私はパッケージのAPIをかなり頻繁に変更していますが、完了時にすべての定義済みシンボルを(必要に応じて)company-mode
プルします。バインドされていない名前を誤って使用したくないので、たとえば、で始まるすべての変数と関数のバインドを解除するにはどうすればよいですか?この後、再びできるようになります。my-package-
load-file
回答:
コールunload-feature
のelispソースまたはバイトコンパイルされたファイルを読み込むの一部として定義されたすべてのシンボルを未定義します。provide
最後に呼び出して、ファイルが終了することを確認します。これは、load
関数の1つまたはを介してファイルをロードしたことを前提としています。()または同様のメカニズムでrequire
定義された未定義のシンボルはありません。C-M-x
eval-defun
シンボルを定義したパッケージではなく名前に基づいてシンボルのバインドを本当に解除する場合はmapatoms
、すべてのシンボルを反復処理するために使用できます。
(mapatoms (lambda (symbol)
(if (string-prefix-p "foo-" (symbol-name symbol))
(unintern symbol))))
provide
。しかし、とにかく、あなたが本当に物事を汚いやり方でやりたいなら、私の編集を見てください。
provide
、この場合うまくいかないと思います。関数は、インタラクティブに評価された場合、定義されたファイルを覚えていますか?
unload-feature
ファイルからロードせずにコードを評価する場合は効果がありません(その場合provide
)。
makunbound
ダイナミック変数としてのシンボルの使用を削除するために使用します(つまり、その無効にしますsymbol-value
)。
fmakunbound
関数としてのシンボルの使用を削除するために使用します(つまり、そのを無効にしますsymbol-function
)。
mapatoms
すべてのシンボルを反復処理するために使用します。symbol-name
興味のある特定のプレフィックスと一致するそれぞれに作用します:両方makunbound
を呼び出しますfmakunbound
。
変数または関数としての使用だけでなく、シンボル自体に対する補完も使用している場合を除きunintern
、シンボルは必要ありません。ただし、シンボルを完全に削除する場合は、を使用します。unintern
feature
システムよりも1レベル深いです。明示的なグループ化を行わずに、関数と変数のみを使用しています。私は評価を気にしませんでした(provide 'my-package)
。