একটি বাফার-স্থানীয় পরিবর্তনশীলটি আবার বৈশ্বিক হয়ে উঠুন


12

আমি স্থানীয় ভেরিয়েবলগুলির সাথে পরীক্ষা করছিলাম এবং সেট করছিলাম:

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

আমি পরে এটির পরিবর্তে বিশ্বব্যাপী ভেরিয়েবল ব্যবহার করার জন্য আমার প্রোগ্রামটি নতুন করে ডিজাইন করেছি:

(defvar foo nil "Not buffer local foo")

তবে ভেরিয়েবলটি এখনও স্থানীয় স্থানীয় বাফার এবং এমনকি (kill-local-variable 'foo)এটি হত্যা করে নি।

মূলত, আমি কীভাবে "পূর্বাবস্থাপন" করতে পারি make-local-variable?


1
শুধু এফডাব্লুআই, ডিফভার-লোকাল ব্যবহার করে make-variable-buffer-localনা make-local-variable
মালবারবা

উত্তর:


12

@ মালবারবা থেকে দেওয়া মন্তব্যটি আপনার সমস্যার ব্যাখ্যা দেয়।

kill-local-variable নেই স্থানীয় বাঁধাই পরিবর্তনশীল পরিত্রাণ পেতে। তবে যেহেতু আপনার ক্ষেত্রে ভেরিয়েবলটি কোনও বাফারে স্বয়ংক্রিয়ভাবে স্থানীয় হয়, আপনি যখন এটির কোনও মূল্য পুনরায় অর্পণ করেন, সেই মানটি স্থানীয়।

আফাইক, প্রতীকটি make-variable-buffer-localব্যবহার uninternকরা ছাড়া কাউন্টার করার কোনও উপায় নেই । ( makunboundসাহায্য করে না।)

আপনি যদি অবিরাম ব্যবহার করেন তবে আপনি ঠিক আছেন। তবে মনে রাখবেন যে আনইনটার্নিং প্রতীকটিকে পুরোপুরি সরিয়ে দেয়, তাই আপনি যদি ভেরিয়েবলের পাশাপাশি চিহ্নটি অন্য কোনও কিছুর জন্য ব্যবহার করেন তবে এর নেতিবাচক পরিণতিও হতে পারে।

সুতরাং আমার কাছে কেবলমাত্র উত্তরটি হ'ল ব্যবহার করতে হবে uninternএবং তারপরে আপনি যে মানটি চান তা ভেরিয়েবলটিকে পুনরায় নিয়োগ করুন - এটি একটি বৈশ্বিক মান হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.