私はパッケージのAPIをかなり頻繁に変更していますが、完了時にすべての定義済みシンボルを(必要に応じて)company-modeプルします。バインドされていない名前を誤って使用したくないので、たとえば、で始まるすべての変数と関数のバインドを解除するにはどうすればよいですか?この後、再びできるようになります。my-package-load-file
私はパッケージのAPIをかなり頻繁に変更していますが、完了時にすべての定義済みシンボルを(必要に応じて)company-modeプルします。バインドされていない名前を誤って使用したくないので、たとえば、で始まるすべての変数と関数のバインドを解除するにはどうすればよいですか?この後、再びできるようになります。my-package-load-file
回答:
コールunload-featureのelispソースまたはバイトコンパイルされたファイルを読み込むの一部として定義されたすべてのシンボルを未定義します。provide最後に呼び出して、ファイルが終了することを確認します。これは、load関数の1つまたはを介してファイルをロードしたことを前提としています。()または同様のメカニズムでrequire定義された未定義のシンボルはありません。C-M-xeval-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)。