ฉันจะนำ `ศูนย์ 'กลับมาได้อย่างไร


18

ฉันตั้งใจทำสิ่งต่อไปนี้:

(unintern variable)

ที่คุ้มค่าของถูกvariablenil

ฉันจะnilกลับมาโดยไม่ต้องรีสตาร์ท Emacs ได้อย่างไร?


3
+1 ที่ทำให้ฉันหัวเราะ :-) ไม่ได้อยู่ในแนวทางที่วางตัว แต่ใน "ฉันจะทำแบบนั้นเหมือนกันทั้งหมด"
Malabarba

@Malabarba :) มันเป็นความเข้าใจที่ถ่อมใจเมื่อฉันรู้ว่าสิ่งที่ฉันได้ทำไปแล้ว
Sean Allred

1
คุณสามารถลบไม่มี! ไม่เห็นว่ามา
Gambo

@Gambo ไม่ไม่ฉัน :)
ฌอน Allred

คำตอบ:


19

(defconst nil ())

ดูเหมือนว่าจะมีผลกระทบที่เหมาะสม; โปรดทราบว่าnilและรายการว่างเปล่าจะแยกไม่ออกใน Emacs Lisp

ผมมองไปที่lread.c:4034เพื่อดูว่าจะถูกสร้างขึ้นในnilobarray

หมายเหตุความคิดเห็นที่บรรทัด 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นี้จริง ๆ แล้ว :) ลงมาสู่ถนนที่บ้าคลั่ง
Sean Allred

bleh ฉันเห็นด้วยกับ rms มากกว่า sm ที่นี่ Uninterning nilเป็นข้อผิดพลาดทั่วไปที่ง่ายต่อการป้องกัน ทำไมจึงวางราวบันไดเมื่อผู้คนสามารถกระโดดข้ามมันได้?
Gilles 'หยุดความชั่วร้าย'

@Gilles ฉันคิดเกี่ยวกับสิ่งนี้ตามที่ฉันคิดเกี่ยวกับ C: C รักษาปรัชญาที่โปรแกรมเมอร์รู้ว่าเขากำลังทำอะไรอยู่และต้องการเพียงวิธีในการแสดงออกเท่านั้น IMO เราควรพิจารณา emacs lisp เป็นภาษาแอสเซมบลีของ emacs abstractions ที่สูงขึ้น (และ guards / ฟีเจอร์) ควรเพิ่มในภาษาที่คอมไพล์ไปยัง elisp แต่ที่แน่นอนหัวข้อสำหรับสื่ออื่น :)
ฌอน Allred

uninternไม่ได้ใช้บ่อยจริงๆ การใช้งานบน main obarrayนั้นเป็นความคิดที่ไม่ดีอยู่เสมอ (ซึ่งเป็นสาเหตุที่ byte-compiler บ่นเมื่อคุณไม่ผ่านการโต้แย้งที่สองและC-h f uninternไม่ได้บอกคุณว่า arg ที่สองยังคงเป็นตัวเลือก)
สเตฟาน

@ สเตฟานดูเหมือนว่าเป็นข้อบกพร่องของเอกสารจากนั้น :(
Sean Allred
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.