Saya baru mulai menggunakan emacs beberapa hari yang lalu dan saya membaca di suatu tempat yang (require 'package-name)
tidak diperlukan ketika paket tersebut diinstal menggunakan paket-instal. Tetapi mengapa, apa yang (require 'package-name)
sebenarnya dilakukan dan bagaimana bedanya load-file
atau load
prosedurnya?
10
M-x describe-function
membaca doc-string. aliasC-h f
KetikM-x describe-function RET require RET
dan membaca doc-string. Kemudian ketikM-x describe-function RET load-file RET
dan baca string-doc. Kemudian ketikM-x describe-function RET load RET
dan baca string-doc. Setelah membaca ketiga dokumen, harap edit pertanyaan Anda untuk membandingkan dan membedakan ketiga fungsi tersebut dan mengklarifikasi apa yang masih belum Anda pahami terkait dengan hal tersebut. Kami menggunakan prosedur yang sama untuk variabel - yaituM-x describe-variable
,.Jawaban:
Jika Anda
load
perpustakaan berulang kali, file itu akan dibaca dan kodenya dievaluasi berulang kali (setiap kali Anda memuatnya).Jika Anda
require
perpustakaan berulang kali, ini akanload
menjadi perpustakaan sekali (paling banyak - dan tidak sama sekali jika perpustakaan sudah dimuat).require
memberikan efisiensi ini bahkan jikarequire
tidak digunakan untuk memuat perpustakaan pada awalnya, karena (sebagian besar) perpustakaan berisi kode(provide 'FEATURE)
untukFEATURE
nama khusus mereka . Kode itu dievaluasi ketika perpustakaan dimuat, terlepas dari bagaimana itu dimuat, dan pada saat itu memperbarui data yangrequire
memeriksa ketika memutuskan apakah perlu melakukan sesuatu.Sebagian besar Anda ingin menggunakan
require
kode Anda sendiri, jika Anda perlu memastikan bahwa perpustakaan yang diberikan telah dimuat.Alasan Anda sering tidak perlu melakukan ini dengan paket ELPA adalah manajer paket secara otomatis memproses cookie pengisian otomatis apa pun dalam paket, dan menghasilkan file pengisian otomatis untuk paket itu. Ketika sistem paket diinisialisasi ketika Anda memulai Emacs, file pengisian otomatis untuk setiap paket dievaluasi, yang mengidentifikasi semua fungsi yang dimuat secara otomatis. Ketika fungsi autoloaded dipanggil, pustaka yang berisi definisi sebenarnya dari fungsi dimuat secara otomatis.
Pembuat paket dapat menambahkan cookie pengisian otomatis ke setiap fungsi yang diharapkan oleh pengguna untuk dipanggil secara langsung dan, asalkan harapan mereka benar, Anda tidak perlu menelepon
require
atau dengan cara lain memuat paket secara eksplisit untuk menggunakannya.Perhatikan bahwa Anda juga dapat menetapkan autoloads kustom Anda sendiri. Lihat C-hig
(elisp) Autoload
RETdan juga(elisp) Hooks for Loading
jika Anda ingin menggunakan pustaka pemuatan malas dan konfigurasi perpustakaan yang ditangguhkan di konfigurasi Anda sendiri. (Yang terakhir mengatakan "jangan mengevaluasi kode ini sampai perpustakaan ini telah dimuat", yang berhubungan baik dengan "jangan memuat perpustakaan ini sampai dibutuhkan" mekanisme pengisian otomatis).sumber
(elisp) Named Features
.