2016-03-29 50 views
1

İki kat bir sorum var ve burada uzmanlardan tavsiye almayı umuyorum. Bazı kodların sözdizimsel bir analizinde, daha sonra kullanmak üzere bulunan bileşenleri saklamak zorundayım. Şimdi bunları özellik listesi olarak saklıyorum (izole edilmiş olanı, kod içeren dizeden değil, bu bana uygun olsa da oldukça kötüye kullanım gibi gözükecektir). Bu durum, bütün konvansiyonlara mı yoksa bu durumla başa çıkmak için makul bir yol mu?backticks ile plist oluşturulmasına izin veriliyor

2) (let ...) deyiminde bir özellik listesi oluşturulamıyor.

(setq x "BAR") 
(setq pl `(bar ,x)) 
(setq pl (plist-put pl 'foo "FOO")) 
(plist-get pl 'foo) ; returns "FOO" 

Ama bu değil:

Bu işleri

(let (pl `(bar ,x)) 
    (setq pl (plist-put pl 'foo "FOO")) 
    (plist-get pl 'foo)) 

Emacs boşluk fonksiyonu çubuğu hakkında şikayet ediyor. Açıkçası, backtick'e rağmen (bar ...)'u değerlendirmeye çalışmaktadır. Niye ya? Parantez eksikliğinden dolayı

cevap

2

. (Bu doğru; Adından "ters tırnak" dır) Bu (Başlangıç ​​değeri bulunmayan ve dolayısıyla nil başlatıldı) değişken pl bildirir

(let (pl (\` (bar (\, x)))) 
    (setq pl (plist-put pl 'foo "FOO")) 
    (plist-get pl 'foo)) 

yanı sıra `isimli bir değişken: özel ters tırnak notasyonu genişletelim başlatıldı (bar (\, x)) değerine.

Yani, yerine aşağıdaki yazmak istiyorum:

(let ((pl `(bar ,x))) 
    ...)