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.
Ho ottenuto la concezione perfetta ora! Può essere paragonato alla chiamata per valore e chiama per riferimento in altre lingue! Grazie! – kjshim