Làm thế nào tôi có thể mang lại `nil`?


18

Tôi đã vô tình chạy như sau:

(unintern variable)

nơi variablegiá trị 's là nil.

Làm thế nào để tôi nilquay lại mà không cần khởi động lại Emacs?


3
+1 để làm tôi cười thầm. :-) Không phải theo cách hạ thấp, mà theo cách "tôi cũng sẽ hoàn toàn làm điều đó".
Malabarba

@Malabarba :) Đó thực sự là một nhận thức khiêm tốn khi tôi tìm ra những gì tôi đã làm
Sean Allred

1
Bạn có thể xóa con số không! Không thấy rằng sắp tới.
Gambo

@Gambo cũng không phải tôi :)
Sean Allred

Câu trả lời:


19

(defconst nil ())

dường như có tác dụng đúng; lưu ý rằng nilvà một danh sách trống không thể phân biệt được trong Emacs Lisp.

Tôi nhìn vào lread.c:4034để xem làm thế nào nilđược tạo ra trong một obarray.

Lưu ý nhận xét ở dòng 3896 tronglread.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"); */

Điều này giải thích tại sao Emacs không bảo vệ chống lại (unintern nil)(unintern t).


Rất thông minh! Tôi đồng ý với Stefđiều này, thực sự :) Xuống con đường đó là sự điên rồ.
Sean Allred

Thôi nào. Tôi đồng ý với rms hơn sm ở đây. Không liên quan nillà một lỗi phổ biến dễ bảo vệ chống lại. Tại sao đặt một tay vịn trên cầu thang khi mọi người có thể nhảy qua nó?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi nghĩ về điều này khi tôi nghĩ về C: C duy trì triết lý rằng lập trình viên biết những gì anh ta đang làm và chỉ yêu cầu một cách để thể hiện bản thân. IMO, chúng ta nên coi emacs lisp là ngôn ngữ lắp ráp của emacs; trừu tượng cao hơn (và bảo vệ / tính năng) nên được thêm vào trong một ngôn ngữ biên dịch thành elisp. Nhưng đó chắc chắn là một chủ đề cho một phương tiện khác :)
Sean Allred

uninternkhông được sử dụng thường xuyên, thực sự. Sử dụng nó trên chính obarraykhá nhiều luôn là một ý tưởng tồi (đó là lý do tại sao trình biên dịch byte phàn nàn khi bạn không vượt qua đối số thứ hai và C-h f uninternkhông cho bạn biết rằng đối số thứ hai thực sự vẫn là tùy chọn).
Stefan

@Stefan Có vẻ như đó là một lỗi tài liệu, sau đó :(
Sean Allred
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.