2009-11-23 14 views

risposta

22

L'apostrofo è una citazione che indica all'interprete di non analizzare la seguente espressione (il nome del simbolo). Pertanto, 'add-to-list ottiene il simbolo che contiene il valore dell'elenco che si intende valutare.

Per ulteriori informazioni sui simboli, leggere la documentazione Symbol (in particolare, i simboli Symbol Components hanno nomi, valori, definizioni di funzioni e elenchi di proprietà).

Senza leggere la documentazione, questo è il modo in cui lo spiego: Emacs lisp's evaluation strategy deve passare per valore (a differenza di nome o riferimento o altro). Se la citazione non fosse presente, flymake-allowed-file-name-masks verrebbe valutata su un valore e add-to-list dovrebbe funzionare direttamente nell'elenco. Questo funzionerebbe, con le seguenti eccezioni. Se la lista fosse vuota, non ci sarebbe modo di cambiare a cosa puntasse la variabile originale. Per lo stesso motivo, non potresti aggiungere elementi in cima all'elenco.

Per rendere funzionanti questi due casi, è effettivamente necessario il nome della variabile in modo che sia possibile modificare i punti a .

Probabilmente sarebbe utile leggere quanto segue: Introduction to Evaluation, Modifying List Variables e Modifying Existing List Structures.

Se hai familiarità con box diagrams, forse questo sarà di aiuto.

immaginare che some-var punti a un elenco:

somevar 
    | 
    | 
    v 
--- ---  --- ---  --- ---   
| | |--> | | |--> | | |--> nil 
--- ---  --- ---  --- ---   
    |   |   |    
    |   |   |    
    --> rose  --> violet --> buttercup 

e di voler mettere qualcosa sul fronte di tale elenco.

Se tutto quello che dovete lavorare con è il valore del puntatore in somevar, quindi il meglio che puoi fare è mettere un nuovo elemento sulla parte anteriore della lista, ma non si può effettivamente modificare ciò che somevar punti da (perché non hai somevar, hai il valore ). In questo modo:

   somevar 
       | 
       | 
       v 
--- ---  --- ---  --- ---  --- ---   
| | |--> | | |--> | | |--> | | |--> nil 
--- ---  --- ---  --- ---  --- ---   
    |   |   |   |    
    |   |   |   |    
    --> tulip  --> rose  --> violet --> buttercup 

Quindi, per scrivere la propria funzione 'add-to-list, è necessario il nome della variabile.

Ovviamente, se hai scritto 'add-to-list come macro, non avresti questa restrizione.

+1

Ho ottenuto la concezione perfetta ora! Può essere paragonato alla chiamata per valore e chiama per riferimento in altre lingue! Grazie! – kjshim

Problemi correlati