Tasarımla belirli kütüphaneler eksik olduğunda “Uyarı: serbest değişkene atama” ile ilgilenme


12

Modumun bayt derlemesi:

(defun dict-setup-expansions ()
  "Add `dict-mode' specific expansions."
  (set (make-local-variable 'er/try-expand-list) (list #'dict-mark-article)))

uyarı verir:

Warning: assignment to free variable `er/try-expand-list'

er/try-expand-listEksternada tanımlandığı için bu normal bir durumdur ; Kütüphane expand-regionolan http://elpa.gnu.org

Benim mod kayıt uzantısı expand-regionkütüphaneye ama modumu mod olmadan çalıştırmak için sorun değil expand-region.

Ben uyarı ile başa çıkmak için uygun bir yol beyan eklemek olduğunu düşünüyorum:

(defvar er/try-expand-list)

defvar dokümanlar diyor ki:

The `defvar' form also declares the variable as "special",
so that it is always dynamically bound even if `lexical-binding' is t.

Ben kullanıyorum -*- lexical-binding: t -*-. Bu defvardeğişken olmadan er/try-expand-listsözcüksel kapsamda olduğu ve gerçek hatam olduğu anlamına mı geliyor ?


2
Yan not: içindeki sembolü alıntı yapmamalısınız (defvar er/try-expand-list).
JeanPierre

@JeanPierre Düzeltildi.
gavenkoa

Yanıtlar:


10

Hayır setve setqsözcük değişkenleri bildirmeyin. Sadece letöyle. Eğer kullanılan Had letEğer bir hata olurdu, ama bu gayet burada. Uyarı genellikle dinamik değişkenler kullanılırken yazım hatalarını yakalamak için kullanılır.

Yapmak için uyarı kullanımını go away defvarsorunuzu olarak değil, do not sembolü alıntı.


Sarmak eval-when-compilesadece gereksiz defvarmi? Ben olmadan uyarı görmüyorum eval-when-compile. eval-when-compileAktif kod kullanırsanız gerekli gibi görünüyor (require ...)...
gavenkoa

3
Sarma defvar gereksizdir.
lunaryorn
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.