লেজিকাল স্কোপ সহ লেট-বাউন্ড ভেরিয়েবলগুলিতে সেটাক এবং সেট কোট কেন আলাদাভাবে কাজ করে?


14

আমার এক এক্সটেনশনে আমার একটি বাগ ছিল যা অবশেষে setআমার প্রত্যাশা অনুযায়ী কাজ না করার কারণে ঘটেছে :

;; -*- lexical-binding: t -*-

(let ((a nil))
  (setq a t)
  (print a))


(let ((a nil))
  (set 'a t)
  (print a))

যখন emacs -Q --batch -l temp.elপ্রিন্ট দিয়ে চালাবেন :

t

nil

এটি আমার কাছে খুব অদ্ভুত বলে মনে হচ্ছে। আমি এইরকম যে অধীন ছিল (setq a b)জন্য সাধারণভাবে সংক্ষেপে হয় (set 'a b)। কি হচ্ছে?

উত্তর:


14

এটি নথিভুক্ত আচরণ। ইমাস 25.1 এলিজপ ম্যানুয়ালটিতে (অনেক উন্নত) ব্যাখ্যা নীচে রয়েছে:

নোট করুন যে ডায়নামিক ভেরিয়েবলগুলি যা প্রতীকের অবজেক্টের সাথে আবদ্ধ থাকে, লেক্সিকাল ভেরিয়েবল এবং চিহ্নগুলির মধ্যে সম্পর্ক কেবল দোভাষী (বা সংকলক) উপস্থিত থাকে। সুতরাং, যে ফাংশনগুলি একটি প্রতীক আর্গুমেন্ট গ্রহণ করে (যেমন 'প্রতীক-মান', 'বাউন্ড্প', এবং 'সেট') কেবল কোনও ভেরিয়েবলের গতিশীল বাঁধাই (যেমন, এর প্রতীকটির মান কক্ষের বিষয়বস্তু) পুনরুদ্ধার বা সংশোধন করতে পারে।

C-hig (elisp) Lexical Binding

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