Làm cho một biến bộ đệm cục bộ trở thành toàn cầu một lần nữa


12

Tôi đã thử nghiệm với các biến cục bộ và thiết lập:

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

Sau đó tôi đã thiết kế lại chương trình của mình để sử dụng biến toàn cục thay vì sử dụng:

(defvar foo nil "Not buffer local foo")

nhưng biến vẫn là bộ đệm cục bộ và thậm chí (kill-local-variable 'foo)không giết nó.

Về cơ bản, làm thế nào tôi có thể "hoàn tác" make-local-variable?


1
Chỉ cần FWI, defvar-local make-variable-buffer-localkhông sử dụng make-local-variable.
Malabarba

Câu trả lời:


12

Nhận xét từ @Malabarba giải thích vấn đề của bạn.

kill-local-variable không thoát khỏi ràng buộc biến cục bộ. Nhưng vì trong trường hợp của bạn, biến tự động cục bộ trong bất kỳ bộ đệm nào, khi bạn gán lại cho nó một giá trị, giá trị đó là cục bộ.

AFAIK, không có cách nào để chống lại make-variable-buffer-local, ngoại trừ sử dụng uninterntrên biểu tượng. ( makunboundkhông giúp.)

Nếu bạn sử dụng unitern thì bạn ổn. Nhưng hãy nhớ rằng việc không liên kết sẽ loại bỏ hoàn toàn biểu tượng, vì vậy nếu bạn sử dụng biểu tượng cho một thứ khác, bên cạnh một biến, thì có thể có những hậu quả tiêu cực.

Vì vậy, câu trả lời duy nhất tôi có là sử dụng uninternvà sau đó gán lại biến bất kỳ giá trị nào bạn muốn - đó sẽ là giá trị toàn cầu.

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.