Як я можу відв'язати всі визначення символів певним префіксом?


11

Я змінюю API свого пакету досить часто, але company-modeтягне кожен визначений символ (як слід) у його доповненнях. Я не хочу випадково використовувати незв'язане ім'я, тож як я можу відв'язати всі змінні та функції, що починаються, скажімо, від my-package-? Після цього я знову зможу load-fileзнову.

Відповіді:


10

Виклик unload-featureдля визначення всіх символів, які були визначені як частина завантаження джерела Elisp або файлу, складеного байтами. Переконайтесь, що ваш файл закінчується, зателефонувавши provideв кінці. Це передбачає, що ви завантажили файл однією з loadфункцій або через require, він не визначатиме символи, визначені C-M-x( eval-defun) або подібними механізмами.

Якщо ви дійсно хочете від’єднати символи на основі їх імені, а не на основі пакета, який їх визначив, ви можете скористатися переглядом mapatomsусіх символів.

(mapatoms (lambda (symbol)
            (if (string-prefix-p "foo-" (symbol-name symbol))
                (unintern symbol))))

Корисно, але я не вірю, що це буде ефективним для інтерактивного розвитку, як я описую. Я на один рівень глибший за featureсистему; Я працюю лише з функціями та змінними без явного групування. Я не переймався оцінкою (provide 'my-package).
Шон Аллред

2
@SeanAllred Я не можу придумати належну причину не використовувати provide. Але все одно, якщо ви дійсно хочете робити речі брудним способом, дивіться мою редакцію.
Жил "ТАК - перестань бути злим"

О, я люблю provide, я просто не думаю, що це спрацювало б у цьому випадку. Чи пам'ятають функції, в якому файлі вони були визначені, якщо вони оцінювались інтерактивно?
Шон Аллред

2
unload-featureне має ефекту, якщо ви оцінюєте код, не завантажуючи його з файлу (який є provide).
Дрю

2
@SeanAllred Ні, функції пам'ятають лише звідки вони завантажені, якщо вони завантажувались як частина завантаження цілого файлу.
Жил "ТАК - перестань бути злим"

7
  • Використовуйте makunboundдля видалення використання символу як динамічної змінної (тобто для анулювання його symbol-value).

  • Використовуйте fmakunboundдля видалення використання символу як функції (тобто для анулювання його symbol-function).

  • Використовуйте mapatomsдля повторення всіх символів. Дійте на кожного, чий symbol-nameзбіг відповідає конкретному префіксу, який вас цікавить: дзвоніть makunboundі fmakunboundна нього, і на нього.

  • uninternСимвол вам не потрібен , якщо ви також не використовуєте доповнення проти самих символів, а не тільки над їх використанням як змінних чи функцій. Але якщо ви дійсно хочете , щоб повністю видалити символ потім використовувати unintern.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.