Wygląda na to, że większość (jeśli nie wszystkie) globalne declarations nie może być odwrócone w standardowy sposób ANSI CL.Jak cofnąć deklarację `declaration`?
przykład raz ocenić (bezpośrednio lub poprzez wczytanie pliku) formularz jak (proclaim '(declaration my-decl))
lub (declaim (special *my-var*))
nie ma przenośny sposób, aby (declare (my-decl ...))
nielegalnych lub *my-var*
leksykalny.
Różne implementacje oferują niemobilny sposób przywrócenia deklaracji special
, zwykle poprzez (proclaim '(notspecial *my-var*))
lub inną sztuczkę.
Co powiecie na declaration
proclamation?
W jaki sposób różne implementacje można cofnąć? Jak mógłbyś to wdrożyć? Czy uważasz, że (proclaim '(notdeclaration my-decl))
to dobry pomysł?
Motywacja: w zestaw testów, byłoby miło być modułowy - aby móc przywrócić wszystkie skutki sprawozdania z badań, aby uniknąć ewentualnych zakłóceń w części zestawu testowego. Wiem, że to motywacja na tydzień, ponieważ The Right Way to użycie packages.
Hmm. Co się stanie, jeśli rozwiążesz symbol zmiennej? To prawdopodobnie byłby zły pomysł, ponieważ zepsuje każdą granicę między starymi/nowymi odniesieniami do symbolu –
Nie widzę żadnego właściwego sposobu, aby to zrobić w SBCL, ale wygląda na to, że '(setf (sb-int: info : declaration: uznana nazwa-of-the-declaration) nil) 'zrobiłby to. – jkiiski