Saya telah menemukan bahwa paket-paket berbeda dalam instruksi instalasi mereka menggunakan push atau add-to-list (Misalnya menambahkan direktori ke load-path) dan saya bertanya-tanya apa perbedaannya dan seperti apa use case untuk masing-masingnya.
28
add-to-list
kodecl-pushnew
, dan saya menemukan posting blog ini cukup mencerahkan: yoo2080.wordpress.com/2013/09/11/…Jawaban:
Apa yang disebutkan #zck adalah satu perbedaan. Tetapi jika itu adalah satu-satunya perbedaan maka Anda bisa bertanya tentang
cl-pushnew
danadd-to-list
.Perbedaan penting lainnya:
add-to-list
adalah fungsi, yang artinya mengevaluasi semua argumennya, khususnya yang pertama.push
adalah makro (sebagaimana adanyacl-pushnew
) - ia tidak mengevaluasi argumen keduanya; alih-alih, ia menafsirkannya sebagai tempat umum.Misalnya, jika argumen kedua adalah simbol maka itu dianggap sebagai variabel, dan nilai argumen pertama dikonsolidasikan ke nilai simbol itu sebagai variabel, dan variabel diatur ke kontra baru itu.
Seperti yang dikatakan oleh string doc
add-to-list
:sumber
add-to-list can't use lexical var ...; use push or cl-pushnew
(push (5 6) my-list)
masih memberi saya kesalahan -5
bukan fungsi. Bagaimana ini berbeda dariadd-to-list
perilaku?(5 6)
ke tempat (nilai variabel)my-list
maka Anda perlu membuat daftar(5 6)
. Salah satu cara untuk melakukannya adalah menggunakan'(5 6)
; yang lain adalah menggunakan(list 5 6)
.push
mengevaluasi argumennya.push
adalah tempat, seperti variabel. Arg pertama dievaluasi, dikontribusikan ke nilai variabel itu, dan variabel diatur ke kontra baru itu.add-to-list
mengevaluasi arg pertamanya untuk menghasilkan variabel yang nilainya diperbarui.push
tidak mengevaluasi arg kedua, yang merupakan variabel untuk memperbarui. Urutan arg dibalik antara keduanya.Dari dokumentasi Emacs , atau
C-h f push
:Dari halaman yang sama, atau
C-h f add-to-list
:Jadi
add-to-list
hanya mendorong jika elemen belum ada di sana.sumber
cl-pushnew
berperilaku sepertiadd-to-list
.Perbedaan lain:
push
menambahkan elemen ke awal daftar .add-to-list
memungkinkan Anda untuk menambahkan elemen ke awal atau akhir daftar .sumber