Як я можу повернути назад "нуль"?


18

Я випадково запустив таке:

(unintern variable)

де variableбуло значення nil.

Як повернутися nilназад без перезавантаження Emacs?


3
+1 за те, що я знущався. :-) Не поблажливим чином, але так, як "я б так повністю зробив".
Малабарба

@Malabarba :) Це було по-справжньому химерним усвідомленням, коли я зрозумів, що я зробив
Шон Аллред

1
Ви можете видалити нуль! Не бачив, що прийде.
Гамбо

@Gambo ні я :)
Шон Аллред

Відповіді:


19

(defconst nil ())

здається, має правильний ефект; зауважте, що nilі порожній список не відрізняється від Emacs Lisp.

Я подивився, lread.c:4034щоб побачити, як nilстворюється в obarray.

Зверніть увагу на коментар у рядку 3896 наlread.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"); */

Це пояснює, чому Emacs не захищає від (unintern nil)і (unintern t).


Дуже розумний! Я погоджуюсь з Stefцим, власне :) Внизу на цій дорозі лежить божевілля.
Шон Аллред

Bleh. Я погоджуюсь із сюди. Відключення nil- поширена помилка, від якої легко захиститись. Навіщо ставити поруччя на сходову клітку, коли люди могли перестрибувати її?
Жил 'ТАК - перестань бути злим'

@Gilles Я думаю про це, коли я думаю про C: C, підтримує філософію, що програміст знає, що робить, і просто вимагає способу самовираження. IMO, ми повинні розглядати emacs lisp як мову збирання emacs; більш високі абстракції (і гвардії / функції) повинні бути додані мовою, що складається на elisp. Але це, безумовно, тема для іншого засобу :)
Шон Аллред

uninternне використовується часто, насправді. Використовувати його в основному, obarrayце завжди завжди погана ідея (саме тому компілятор байтів скаржиться, коли ви не пройшли другий аргумент, і C-h f uninternне говорить вам, що другий аргумент насправді все ще необов'язковий).
Стефан

@Stefan Здавалося б, це помилка в документації, тоді :(
Шон Олред
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.