Ich habe versehentlich Folgendes ausgeführt:
(unintern variable)
wo variable
‚s - Wert war nil
.
Wie komme ich nil
zurück, ohne Emacs neu zu starten?
Ich habe versehentlich Folgendes ausgeführt:
(unintern variable)
wo variable
‚s - Wert war nil
.
Wie komme ich nil
zurück, ohne Emacs neu zu starten?
Antworten:
(defconst nil ())
scheint die richtige Wirkung zu haben; Beachten Sie, dass nil
und eine leere Liste in Emacs Lisp nicht zu unterscheiden sind.
Ich habe mir angeschaut, um lread.c:4034
zu sehen, wie nil
in 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)
.
Stef
zu, eigentlich :) Auf diesem Weg liegt der Wahnsinn.
nil
ist 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?
unintern
wird eigentlich nicht oft verwendet. Es obarray
ist 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 unintern
nicht übergeben und Ihnen nicht sagen, dass das zweite Argument tatsächlich noch optional ist).