ทำให้ตัวแปรบัฟเฟอร์ท้องถิ่นกลายเป็นส่วนกลางอีกครั้ง


12

ฉันกำลังทดลองกับตัวแปรท้องถิ่นและตั้งค่า:

(defvar-local foo nil "Buffer local foo")

ภายหลังฉันออกแบบโปรแกรมของฉันใหม่เพื่อใช้ตัวแปรทั่วโลกแทนการใช้:

(defvar foo nil "Not buffer local foo")

แต่ตัวแปรยังคงเป็นบัฟเฟอร์ในเครื่องและยัง(kill-local-variable 'foo)ไม่ได้ฆ่า

โดยทั่วไปฉันจะ "ยกเลิก" ได้make-local-variableอย่างไร


1
เพียงแค่ FWI, ใช้ defvar ท้องถิ่นไม่ได้make-variable-buffer-local make-local-variable
Malabarba

คำตอบ:


12

ความคิดเห็นจาก @Malabarba อธิบายถึงปัญหาของคุณ

kill-local-variable จะกำจัดการผูกพันตัวแปรท้องถิ่น แต่เนื่องจากในกรณีของคุณตัวแปรจะเป็นแบบโลคัลโดยอัตโนมัติในบัฟเฟอร์ใด ๆ เมื่อคุณกำหนดค่าใหม่ค่านั้นจะเป็นแบบท้องถิ่น

AFAIK ไม่มีวิธีในการตอบโต้make-variable-buffer-localยกเว้นใช้uninternกับสัญลักษณ์ ( makunboundไม่ช่วย)

ถ้าคุณใช้ unintern คุณก็โอเค แต่โปรดทราบว่าการลบเครื่องหมายออกทางด้านนอกโดยสิ้นเชิงดังนั้นหากคุณใช้สัญลักษณ์เพื่อสิ่งอื่นนอกเหนือจากตัวแปรแล้วอาจมีผลกระทบด้านลบ

ดังนั้นคำตอบเดียวที่ฉันมีคือการใช้uninternแล้วกำหนดตัวแปรตามที่คุณต้องการ - มันจะเป็นค่าทั่วโลก

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