Apakah menggunakan memerlukan beberapa kali pada idempoten simbol yang sama?

11

Apakah requireidempoten? yaitu lakukan

(require 'helm)

dan

(require 'helm)
(require 'helm)

akhiri dengan hasil yang sama?

PythonNut
sumber

Jawaban:

14

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 requiredengan nama fitur sebagai argumen. requireterlihat dalam variabel global featuresuntuk 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, requiremenandakan kesalahan .

lunaryorn
sumber
Diterima karena mengutip dokumen.
PythonNut
Harap sertakan informasi dari jawaban Gilles di sini. Atau, @Gilles, memasukkan jawaban ini ke dalam jawaban Anda juga akan berhasil.
daveloyall
13

Ya, asalkan kode tersebut mematuhi helm.elatau helm.elcmenghormati aturan yang harus dipanggil (provide 'helm). Panggilan (provide 'helm)menandai simbol helmsebagai fitur yang dimuat , dan ini menyebabkan panggilan kedua (require 'helm)untuk tidak melakukan apa pun.

Jika paket yang dimuat tidak memanggil providemaka requiremenandakan kesalahan, dan fitur tidak ditandai sebagai dimuat, sehingga panggilan kedua (require 'helm)akan mencoba memuat lagi (dan biasanya gagal lagi karena alasan yang sama).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
+1 Terima kasih atas info ekstra. Itu menyelesaikan kebingungan saya setelah membaca dokumen.
PythonNut