Kurulum talimatlarındaki farklı paketlerin ya itme veya listeye ekleme kullandığını buldum (Örneğin, yükleme yoluna bir dizin ekleme) ve farkın ne olduğunu ve her birinin kullanım durumunun ne olacağını merak ediyordum.
Kurulum talimatlarındaki farklı paketlerin ya itme veya listeye ekleme kullandığını buldum (Örneğin, yükleme yoluna bir dizin ekleme) ve farkın ne olduğunu ve her birinin kullanım durumunun ne olacağını merak ediyordum.
Yanıtlar:
#Zck'in bahsettiği şey bir farktır. Ama tek fark bu olsaydı, o zaman cl-pushnewve hakkında sorabilirsiniz add-to-list.
Bir diğer önemli fark: add-to-listbir fonksiyondur, yani bütün argümanlarını, özellikle ilkini değerlendirir. pushbir makrodur (olduğu gibi cl-pushnew) - ikinci argümanını değerlendirmez; bunun yerine, genelleştirilmiş bir yer olarak yorumlar.
Örneğin, ikinci argüman bir sembol ise, o zaman bir değişken olarak kabul edilir ve ilk argümanın değeri bu sembolün değeri üzerine bir değişken olarak kabul edilir ve değişken o yeni eksilere ayarlanır.
Doktor dize add-to-listdiyor ki:
This is handy to add some elements to configuration variables,
but please do not abuse it in Elisp code, where you are usually
better off using `push' or `cl-pushnew'.
add-to-list can't use lexical var ...; use push or cl-pushnew
(push (5 6) my-list)hala bana bir hata veriyor - 5bir işlev değil. Bu add-to-listdavranışından nasıl farklı ?
(5 6)(değişkenin değeri) my-listo zaman listeyi oluşturmanız gerekir (5 6). Bunu yapmanın bir yolu kullanmaktır '(5 6); başka bir kullanmaktır (list 5 6). pushArgümanı değerlendirir.
pushdeğişken gibi bir yer. İlk argüman değerlendirilir, bu değişkenin değerine düşürülür ve değişken o yeni eksilere ayarlanır. add-to-listdeğeri güncellendiğinde değişkeni üretmek için ilk argümanını değerlendirir. pushgüncellenecek değişken olan ikinci argümanını değerlendirmez. Arg sırası, ikisi arasında tersine çevrilir.
Başka bir farklılık:
pushelemanı listenin başına ekler .
add-to-listListenin başına veya sonuna öğe eklemenizi sağlar .
(setq testasdf nil)
(push 'a testasdf)
testasdf
(a)
(add-to-list 'testasdf 'b)
testasdf
(b a)
;; add element to the end
(add-to-list 'testasdf "hello" t)
testasdf
(b a "hello")
Gönderen Emacs belgelerine veya C-h f push:
Makro: push öğe listesi adı
Bu makro, arabası öğe olan ve cdr'ı liste adıyla belirtilen liste olan yeni bir liste oluşturur ve bu listeyi liste adına kaydeder.
Aynı sayfadan veya C-h f add-to-list:
İşlev: listeye ekle sembol öğesi ve isteğe bağlı ekleme-fn ekleme
Bu işlev, öğeyi zaten bu değerin bir üyesi değilse, öğeyi eski değere uygulayarak değişken sembolünü ayarlar.
Bu nedenle, add-to-listyalnızca öğe zaten orada değilse iter.
cl-pushnewgibi davranır add-to-list.
add-to-listkodu dönüştürmekte zorlanıyordumcl-pushnewve bu blog gönderisini oldukça aydınlatıcı buldum: yoo2080.wordpress.com/2013/09/11/…