Gerektirmek yerine otomatik yükü ne zaman kullanmalıyım?


30

Anladığım kadarıyla requirebüyük kod parçalarını (modüller gibi bir şeyleri) yüklemek için de kullanılıyor, ancak bireysel fonksiyonları da yükleyebiliyor.

Diğer tarafta otomatik yükleme , sadece fonksiyonları kaydeder ve yükleme işlemini yürütme süresine karşı korur.

Kısa bir süre önce autoloadsadece kullanımını savunan bir makale okudum .

O daha iyidir autoloaddaha require? Bunların her biri için bazı tipik kullanım durumları nelerdir?


3
@Gilles: FWIW, etiketlerini kaldırmana autoloadve requirebu soruya katılmıyorum . Etiket eklemek librariesiyiydi, ancak şimdi etiket arayan, etiket kullanan , bununla ilgili sorular bulan autoloadveya requirebulamayacak olan herkes . Bunlar, insanların arayacağı önemli Emacs-Lisp işlevleridir. Çok kötü. Ve bir Emacs sitesi için ne kadar faydalı elispve libraries(özellikle elisp) pratikte olacağını düşünün: Emacsland'da pek fazla ayrım yapmıyorlar, korkarım. (Ama hayır, onları alma ve kullanmalarına karşı değilim.)
Drew

@Drew Uygulanabilir meta tartışmalara gidiyorum . Bu genel ilkenin burada geçerli olmadığını düşünüyorsanız, lütfen bunu meta üzerinden yükseltin.
Gilles 'SO- kötülük yapmayı bırak'

1
@Gilles: Yapıldı . Evet, okudum ve belki de sizi motive eden şeyin bu olduğunu anladım. Pek çok genel ilkeye katılmıyorum. Bu, onları battaniye şeklinde takip etmenin her zaman TRT olduğu anlamına gelmez.
Drew

2
Drew ile aynı fikirdeyim: çünkü bu soru özellikle kullanım durumlarını ayırt etmekle ilgili autoloadve requirebu etiketlerin haklı olduğunu düşünüyorum. Aslında, bu soruyu [sadece] ile etiketlemek librariesaşırı genelleştiricidir. Bir kullanım requireiçin, "benim foobar-cfg" nin yüklenmesini tetiklemek için kullanıyorum , ki adından da anlaşılacağı gibi, sadece bir kütüphane değil , sadece benim yapılandırmamı içeriyor .
kırmızı biber

Yanıtlar:


28

autoloadbunun yerine geçmez require. Genellikle require, belirli bir dosyanın yüklendiğinden emin olmak için kullanılır. autoloadÖte yandan Emacs belirli bir fonksiyonu bulmak için hangi dosya içinde bir ipucu verir olmadan hemen dosyası yüklenirken. Yalnızca otomatik yüklü işlev çağrıldığında karşılık gelen dosya yüklenir.

Temelde, autoloadbütün bir dosyanın yüklenmesini, gerçekte ihtiyaç duyduğunuz ana kadar erteleyebilirsiniz. Bu nedenle (özellikle büyük) paketler giriş işlevlerini tipik olarak autoloads olarak tanımlarlar .

Bir paket için ağır özelleştirmeler yapmak istiyorsanız, genellikle şansınız kalmaz autoload. Halen kaçınmak requireistiyorsanız, özelleştirmeleri kullanarak dosya yüklenene kadar erteleyebilirsiniz eval-after-load.

Emacs kılavuzu bu konuyu aşağıdaki bölümlerde ele almaktadır:


2
Belki de ayrıca bahsetmeye değer: autoloadkomut tanımlarını sağlamakla ilgili (az ya da çok), yani bu komutları kullanabilirsiniz. requireYaklaşık yapıyor herşeyi mevcut (kütüphane yinelemeli, gerektirdiğini ve kütüphanelerde) Kütüphanede. Emacs komutlarından daha var. (Ama evet, elbette otomatik olarak yüklenen bir komut çalıştırıldığında, tüm kitaplığı yüklenir.)
Drew

4

Emac'ın başlatılması açısından, herhangi bir seçim yapmayın. GitHub kullanıcısı jwiegley, ihtiyaç duyulan bir paketi gerektiren veya otomatik olarak yükleyecek mükemmel kullanım paketi bildirim makrosuna sahiptir. Talep üzerine yüklenebilecek paketlerin yüklenmesini ertelemek için en iyisi kullanılır.


3

Belirli bir özelliğin Emacs başlatıldığında doğrudan yüklenip kullanılabilir olmasını istiyorsanız, onu kullanın, aksi takdirde otomatik yükleme kullanın. Ben şahsen başlangıç ​​zamanına çok değer veriyorum (aslında Emacs'ı haftada birkaç kez, bazen de günde birkaç kez yeniden başlatıyorum), bu yüzden Emacs'in ihtiyaç duyduğumda belirli bir işlevi otomatik olarak yüklediğinde biraz zaman alacağını kabul ediyorum. Öyleyse, Emacs başladıktan hemen sonra ne olmak istediğinizi ve gerektiğinde ne yüklenebileceğini düşünün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.