একটি প্রধান ফাঁদ যে জন্য বাঁধাই শব্দার্থবিদ্যা হয় অনির্ধারিত ভেরিয়েবল-অর্থাত ভেরিয়েবল সঙ্গে সংজ্ঞায়িত করা defvar
এবং সাথে বন্ধুত্ব-পরিবর্তন lexical-binding
তা ছাড়া,: let
বেঁধে সবকিছু পরিবর্তনশীল কিন্তু lexical-binding
সক্রিয় অনির্ধারিত ভেরিয়েবল আবদ্ধ হয় আভিধানিক , এবং এমনকি বর্তমান আভিধানিক সুযোগ সম্পূর্ণরূপে যদি অব্যবহৃত লুপ্ত ।
পুরানো কোড কখনও কখনও এটির উপর নির্ভর করে। ঐচ্ছিক বৈশিষ্ট্য জন্য কঠিন নির্ভরতা এড়াতে, এটির গতিশীল ভেরিয়েবল বাঁধে চাই ছাড়া সংশ্লিষ্ট গ্রন্থাগার প্রয়োজন বা পরিবর্তনশীল নিজেই ঘোষণা:
(let ((cook-eggs-enabled t))
(cook-my-meal))
যদি রান্নার বৈশিষ্ট্যটি isচ্ছিক হয় তবে আমরা ব্যবহারকারীর উপর অপ্রয়োজনীয় নির্ভরতা জোর করতে চাই না, তাই আমরা ব্যবহার করি না (require 'cook)
এবং পরিবর্তে cook-my-meal
ফাংশনটি অটোলয়েডিংয়ের উপর নির্ভর করি ।
এটি মানব পাঠকের পক্ষে স্পষ্ট যা cook-eggs-enabled
স্থানীয় পরিবর্তনশীল নয়, তবে এটি cook
এখানে গ্রন্থাগার থেকে কিছু গ্লোবাল গতিশীল পরিবর্তনশীল বোঝায় । lexical-binding
এই কোড ব্যতীত উদ্দেশ্য হিসাবে কাজ করে: cook-eggs-enabled
গতিশীলভাবে আবদ্ধ, নির্ধারিত হোক বা না হোক।
সঙ্গে lexical-binding
অবশ্য তা ভঙ্গ: cook-eggs-enabled
এখন আবদ্ধ হয় আভিধানিক (এবং তারপর অপ্টিমাইজ দূরে, কারণ এটি ব্যবহার করা হয় না), তাই বিশ্বব্যাপী গতিশীল পরিবর্তনশীল cook-eggs-enabled
হয় না কখনও এ সব স্পর্শ এবং এখনও nil
সময় দ্বারা cook-my-meal
বলা হয়, তাই আমরা এটি আশ্চর্যজনক কোন ডিম থাকবে না আমাদের খাবারে
ভাগ্যক্রমে, এই বিষয়গুলি স্পট করা খুব সহজ : বাইট সংকলক প্রাকৃতিকভাবে এখানে একটি অব্যবহৃত লেক্সিকাল বাইন্ডিং সম্পর্কে সতর্ক করে ।
ফিক্স সহজ: উভয় ক্ষেত্রেই যোগ একটি (require 'cook)
(বৈশিষ্ট্য যে সত্যিই ঐচ্ছিক যাহাই হউক না কেন না তাদের জন্য), অথবা-টু হার্ড গতিশীল পরিবর্তনশীল হিসাবে পরিবর্তনশীল নির্ভরতা-ডিক্লেয়ার এড়াতে আপনার নিজের কোডে । এর জন্য একটি বিশেষ defvar
ফর্ম রয়েছে:
(defvar cook-eggs-enabled)
এটি cook-eggs-enabled
গতিশীল পরিবর্তনশীল হিসাবে সংজ্ঞায়িত করে তবে ভেরিয়েবলের বাঁধার প্রকৃতি ব্যতীত ডক্ট্রিং, load-history
(এবং এইভাবে find-variable
এবং বন্ধুবান্ধব) বা অন্য কোনও কিছুকে প্রভাবিত করে না ।
cook-eggs-enabled
হতে আনবাউন্ড যখনlet
শেষ? আমি নিশ্চিত যে আমি এর আগে একটি বাগ এ চলেছি। ডিফভারটি অভ্যন্তরের অভ্যন্তরে ঘটছিলlet
, এবংlet
পরবর্তীকালে পরিবর্তনশীলটিকে তার প্রাথমিক (অকার্যকর) অবস্থায় পুনরুদ্ধার করে।