Ich habe versehentlich Folgendes ausgeführt:
(unintern variable)
wo variable‚s - Wert war nil.
Wie komme ich nilzurück, ohne Emacs neu zu starten?
Ich habe versehentlich Folgendes ausgeführt:
(unintern variable)
wo variable‚s - Wert war nil.
Wie komme ich nilzurück, ohne Emacs neu zu starten?
Antworten:
(defconst nil ())
scheint die richtige Wirkung zu haben; Beachten Sie, dass nilund eine leere Liste in Emacs Lisp nicht zu unterscheiden sind.
Ich habe mir angeschaut, um lread.c:4034zu sehen, wie nilin einer obarray.
Beachten Sie den Kommentar in Zeile 3896 inlread.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"); */
Dies erklärt, warum Emacs nicht vor (unintern nil)und schützt (unintern t).
Stefzu, eigentlich :) Auf diesem Weg liegt der Wahnsinn.
nilist ein häufiger Fehler, vor dem man sich leicht schützen kann. Warum einen Handlauf auf eine Treppe stellen, wenn Leute darüber springen könnten?
uninternwird eigentlich nicht oft verwendet. Es obarrayist so gut wie immer eine schlechte Idee, es auf dem Main zu verwenden (weshalb sich der Byte-Compiler beschwert, wenn Sie das zweite Argument C-h f uninternnicht übergeben und Ihnen nicht sagen, dass das zweite Argument tatsächlich noch optional ist).