Jak mogę przywrócić „zero”?


18

Przypadkowo uruchomiłem następujące:

(unintern variable)

gdzie variablebyła wartość nil.

Jak mogę nilwrócić bez ponownego uruchamiania Emacsa?


3
+1 za rozśmieszenie mnie. :-) Nie w protekcjonalny sposób, ale w sposób „zrobiłbym to całkowicie”.
Malabarba

@Malabarba :) To było naprawdę upokarzające zrozumienie, kiedy zorientowałem się, co zrobiłem
Sean Allred

1
Możesz usunąć zero! Nie spodziewałem się tego.
Gambo

@Gambo ja też nie :)
Sean Allred

Odpowiedzi:


19

(defconst nil ())

wydaje się mieć właściwy efekt; zwróć uwagę, że nili pusta lista jest nie do odróżnienia w Emacs Lisp.

Spojrzałem, lread.c:4034aby zobaczyć, jak nilpowstaje w obarray.

Zwróć uwagę na komentarz w wierszu 3896 wlread.c :

/* There are plenty of other symbols which will screw up the Emacs
     session if we unintern them, as well as even more ways to use
     `setq' or `fset' or whatnot to make the Emacs session
     unusable.  Let's not go down this silly road.  --Stef  */
  /* if (EQ (tem, Qnil) || EQ (tem, Qt))
       error ("Attempt to unintern t or nil"); */

To wyjaśnia, dlaczego Emacs nie chroni przed (unintern nil)i (unintern t).


Bardzo mądry! Zgadzam się z Steftym, właściwie :) Na tej drodze leży szaleństwo.
Sean Allred

Bleh Zgadzam się z rms nad sm tutaj. Uninterning niljest częstym błędem, przed którym można łatwo się zabezpieczyć. Po co umieszczać poręcz na schodach, skoro ludzie mogliby przez nią przeskoczyć?
Gilles „SO- przestań być zły”

@Gilles Myślę o tym, gdy myślę o C: C utrzymuje filozofię, że programista wie, co robi, i po prostu potrzebuje sposobu, aby wyrazić siebie. IMO, powinniśmy uważać emacs lisp za język asemblera emacs; wyższe abstrakcje (i osłony / funkcje) powinny być dodane w języku kompilującym się w elisp. Ale to z pewnością temat na inne medium :)
Sean Allred

uninterntak naprawdę nie jest często używany. Używanie go na main obarrayjest prawie zawsze złym pomysłem (dlatego kompilator bajtów narzeka, gdy nie przejdziesz drugiego argumentu i C-h f uninternnie mówi ci, że drugi argument jest nadal opcjonalny).
Stefan

@Stefan Wygląda na to, że to błąd w dokumentacji, a następnie :(
Sean Allred
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.