Come posso separare tutte le definizioni dei simboli con un determinato prefisso?


11

Sto cambiando l'API del mio pacchetto abbastanza frequentemente, ma company-modeestrae ogni simbolo definito (come dovrebbe) nei suoi completamenti. Non voglio usare accidentalmente un nome non associato, quindi come posso separare tutte le variabili e le funzioni che iniziano con, diciamo my-package-,? Dopo questo, sarò semplicemente in grado di load-filenuovo.

Risposte:


10

Chiama unload-featureper annullare la definizione di tutti i simboli definiti durante il caricamento di una sorgente Elisp o di un file compilato in byte. Assicurati che il tuo file termini chiamando providealla fine. Ciò presuppone che il file sia stato caricato con una delle loadfunzioni o tramite require, non verranno definiti simboli definiti da C-M-x( eval-defun) o meccanismi simili.

Se vuoi davvero separare i simboli in base al loro nome piuttosto che in base al pacchetto che li ha definiti, puoi usare mapatomsper scorrere tutti i simboli.

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

Utile, ma non credo che questo sarà efficace con lo sviluppo interattivo come descrivo. Sono di un livello più profondo del featuresistema; Sto lavorando solo con funzioni e variabili senza alcun raggruppamento esplicito. Non mi sono preoccupato di valutare (provide 'my-package).
Sean Allred,

2
@SeanAllred Non riesco a pensare a un buon motivo per non usarlo provide. Ma comunque, se vuoi davvero fare le cose nel modo sporco, vedi la mia modifica.
Gilles 'SO- smetti di essere malvagio' il

Oh, adoro provide, non penso che funzionerebbe in questo caso. Le funzioni ricordano in quale file sono state definite se sono state valutate in modo interattivo?
Sean Allred,

2
unload-featurenon ha alcun effetto se si valuta il codice senza caricarlo da un file (che ha provide).
Ha

2
@SeanAllred No, le funzioni ricordano solo da dove sono state caricate se sono state caricate come parte del caricamento di un intero file.
Gilles 'SO- smetti di essere malvagio' il

7
  • Utilizzare makunboundper rimuovere l'uso di un simbolo come variabile dinamica (cioè, per annullarne il valore symbol-value).

  • Utilizzare fmakunboundper rimuovere l'uso di un simbolo come funzione (cioè per annullare il suo symbol-function).

  • Utilizzare mapatomsper scorrere su tutti i simboli. Agisci su ciascuno di essi symbol-namecorrispondente al particolare prefisso che ti interessa: chiama entrambi makunbounde fmakunboundsu di esso.

  • Non è necessario uninternil simbolo, a meno che non si stia utilizzando anche il completamento rispetto ai simboli stessi e non solo il loro uso come variabili o funzioni. Ma se non desidera rimuovere completamente un simbolo quindi utilizzare unintern.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.