Apakah require
idempoten? yaitu lakukan
(require 'helm)
dan
(require 'helm)
(require 'helm)
akhiri dengan hasil yang sama?
Iya. Dari Fitur Bernama (penekanan pada tambang):
Nama fitur adalah simbol yang mewakili kumpulan fungsi, variabel, dll. File yang mendefinisikannya harus menyediakan fitur. Program lain yang menggunakannya dapat memastikan mereka didefinisikan dengan memerlukan fitur tersebut. Ini memuat file definisi jika belum dimuat.
Untuk meminta keberadaan fitur, panggil
require
dengan nama fitur sebagai argumen.require
terlihat dalam variabel globalfeatures
untuk melihat apakah fitur yang diinginkan sudah disediakan. Jika tidak, ini memuat fitur dari file yang sesuai . File ini harus memanggilprovide
di tingkat atas untuk menambahkan fiturfeatures
; jika gagal melakukannya,require
menandakan kesalahan .
Ya, asalkan kode tersebut mematuhi
helm.el
atauhelm.elc
menghormati aturan yang harus dipanggil(provide 'helm)
. Panggilan(provide 'helm)
menandai simbolhelm
sebagai fitur yang dimuat , dan ini menyebabkan panggilan kedua(require 'helm)
untuk tidak melakukan apa pun.Jika paket yang dimuat tidak memanggil
provide
makarequire
menandakan kesalahan, dan fitur tidak ditandai sebagai dimuat, sehingga panggilan kedua(require 'helm)
akan mencoba memuat lagi (dan biasanya gagal lagi karena alasan yang sama).sumber