Üç sembol proclaim
, declaim
ve declare
arasındaki farkları açıklayabilir misiniz?Bildirimi, bildirimi, bildirme
cevap
Bunlar symbols, keywords değil.
proclaim
isimleri küreseldeclarations yapmak için bir işlev. Mümkün olduğundadeclaim
kullanmalısınız. Ayrıca derleme zamanında de etkilidirdeclaim
isimleri küresel bildirimleri yapmak için bir makro (gibiproclaim
).declare
başında yerel beyanları yapılmasına bazı formları (bir unsur olarak görüntüleyebilirsiniz için (bir işlevi, makro veya özel operatörünü isim vermez, ig) sadece sembolü olduğunu Bu formların sözdizimi.
Yani, ilk ikisi global environment ve sonuncusu yereldir. o derleme ortamımızda anında etkiye sahiptir çünkü
declaim
proclaim
üzerinde tercih edilir: a proclaim
formun yürütme olabilir derleme etkileyen etkileri vardır rağmen
, derleyici için herhangi bir girişimde yapmaz Talep formlarını tanır ve özel olarak işler. yürütüldüğünde kadar aşağıdaki bile üst düzey bir biçimde ise, herhangi bir etkisi sahip olmayan böyle bir gibi bir ilan: derleme zaman yan etkilere sahip olmaları istenen
(proclaim '(special *x*))
ise,
eval-when
yararlı olabilir. Örneğin: Çoğu tür durumlarda
(eval-when (:execute :compile-toplevel :load-toplevel) (proclaim '(special *x*)))
, ancak bu amaçla
declaim
kullanmak tercih edilebilir.
kodunuzu
(proclaim '(special *x*))
(defun foo() (print *x*))
ise yanı, derleyici foo
hiçbir uyarılarına neden olur bilinmeyen özel değişkeni *x*
,
(declaim (special *x*))
(defun foo() (print *x*))
ise okur şikayet edecektir.
PS.Eğer CL bile neden proclaim
olduğunu merak ediyorsanız: ilk olarak, tarihsel olarak declaim
'dan önce vardı ve ikincisi, proclaim
, makrolarda daha basit ve kullanışlıdır.
- 1. Bir "bildirme" bildirimi nasıl geri alınır?
- 2. NSNotification bildirimi siparişi bildirimi
- 3. İşleve devam et & && işlev bildirimi
- 4. Ansible playbook işleyicileri, bildirimi bildirme yoluyla hizmeti başlatmıyor
- 5. gcm bildirimi alan sohbetin otomatik olarak nasıl yenileneceğini bildirme
- 6. SQLAlchemy bildirimi uzantısı vs elixir
- 7. Parse Push bildirimi nasıl başlatılır Push bildirimi
- 8. Vaka bildirimi
- 9. OCaml bildirimi
- 10. Erişim Bildirimi
- 11. Varolan Bildirimi
- 12. Android bildirimi,
- 13. Bir Parse gönderme bildirimi Belirli bir kullanıcıya push bildirimi
- 14. FogBugz'da zaman çizelgesi bildirimi?
- 15. Çok Uzun Python Bildirimi
- 16. Python "with" bildirimi sözdizimi
- 17. Android Wear Özel Bildirimi
- 18. Perl Anahtar Bildirimi
- 19. Push Bildirimi Rozetleri Gelmiyor
- 20. Kilitle yeniden sıralama bildirimi
- 21. iOS uygulaması güncelleştirme bildirimi
- 22. Spring MVC Hata bildirimi
- 23. Firebase Push Bildirimi
- 24. Tanımsız Endeksi Bildirimi
- 25. JavaScript anahtarı bildirimi,
- 26. AVPlayer ileri sınıf bildirimi
- 27. Push Bildirimi gönderilemedi
- 28. Olağandışı "statik" yöntem bildirimi
- 29. AVQueuePlayer/AVPlayer yükleme bildirimi?
- 30. SQlite concat select bildirimi
Teşekkürler sds! "Proclaim" ve "declaim" arasındaki farkı açıklayabilir misiniz? Sorgumda "anahtar kelime" kelimesini değiştirdim, kafa karıştırıcıydı. Sembol türünü gizlice gizlemeye çalışıyordum, ama kelime sembolü de aynı derecede güzeldi. – tuscland
Aralarındaki fark şu şekildedir: Biri bir işlevdir ve normalde derleme zamanında hiçbir etkisi yoktur, diğeri ise derleme ortamını etkileyen bir makrodur. Ayrıntılar için spekülasyonu gerçekten okumanız gerekiyor. – sds
Tamam, şimdi anladım, teşekkürler. Dürüst olmak gerekirse, [Hyperspec] (http://clhs.lisp.se/Body/f_procla.htm) anlamak biraz zor, ama gelecekte bunu anlamaya çalışacağım. – tuscland