ম্যাক্রোগুলির জন্য পরিবর্তনশীল স্কোপিং কীভাবে নির্ধারণ করা হয়?


11

নিম্নলিখিত ম্যাক্রো উদাহরণস্বরূপ নিন macro.el

(defmacro some-macro (&rest body)
  `(let ((some-variable 1))
     ,@body))

এবং নিম্নলিখিত ফাংশন, নিতে একটি আলাদা ফাইল সংজ্ঞায়িত , function.el

(defun some-function ()
  (some-macro (do-something)))

কখন function.elবাইট-সংকলন করা হবে, some-variableলেক্সিকাল বা ডায়নামিক বাইন্ডিংয়ের আওতায় থাকবে ?

আমি বুঝতে পারি এটি ফাইলটি ব্যবহার করে কিনা তার উপর নির্ভর করে -*- lexical-binding: t; -*-, সুতরাং আমার প্রশ্নটি নিম্নলিখিত পরিস্থিতিতেগুলিকে বিশেষভাবে সম্মান করে:

  1. তাহলে function.elবাঁধাই কিন্তু ব্যবহারসমূহ আভিধানিক macro.elনা।
  2. তাহলে macro.elবাঁধাই কিন্তু ব্যবহারসমূহ আভিধানিক function.elনা।

অভ্যন্তরে some-varবিশ্বব্যাপী (একটি ডিফওয়ার সহ) ঘোষিত হলে কী কোনও পার্থক্য রয়েছে function.el? যদি তা হয় তবে আমি বিশেষভাবে আগ্রহী যেখানে এটি হয়নি


আমার মনে হয় জিসাং ইয়ু এটিকে yoo2080.wordpress.com/2013/08/14/… এ কিছু বিশদভাবে কভার করেছে
ফিলস

আমি নিশ্চিতভাবে জানি না, তবে আমি বাজি ধরব যে ম্যাক্রো এক্সপেনশনটি ম্যাক্রো সংজ্ঞা থেকে নয়, সম্প্রসারণ সাইট থেকে বাঁধাই শব্দার্থক উত্তরাধিকার সূত্রে প্রাপ্ত। এটি বোধগম্য হবেন যেহেতু সম্প্রসারণটি আসলে কল সাইটে পরিবর্তিত হয়েছে। তবে: আপনি কেন জানতে চান? আপনি কি কোড লিখতে চান যা প্রকৃতপক্ষে এই বিবরণগুলির উপর নির্ভর করে ?!
লুনারিওর

@ লুনারিওরন ম্যাক্রো সম্পূর্ণরূপে এটার উপর নির্ভর করে না, তবে এটি ব্যবহার করা ফাইলটির বাঁধাইয়ের প্রতি সম্মান না
জানালে

@ মালবারবা আপনার ম্যাক্রোটিকে এমনভাবে লিখুন যাতে টার্গেট বাফারে বাইন্ডিংয়ের উপর নির্ভর করে না। বা আরও ভাল, মোটেও ম্যাক্রো ব্যবহার করবেন না।
চন্দ্রালাই

পছন্দ করুন ম্যাক্রোটি কেবল একটি লেট ফর্ম এবং এটি কোনওভাবেই বিজ্ঞাপন হিসাবে কাজ করে। আমি কেবলমাত্র এটি নিশ্চিত করতে চাই যে এই ফর্মটি যে ফাইলটিতে এটি প্রসারিত হয়েছে তাতে উল্লিখিত স্কোপিং অনুসরণ করে। এই প্রশ্নটি স্বয়ংক্রিয়ভাবে ঘটে কিনা বা ম্যাক্রোতে আমাকে কোডিং করতে হবে কিনা তা অনুসন্ধান করার অংশ।
মালবারবা

উত্তর:


9

(let ((some-variable ..)) ...)আপনার উদাহরণের জন্য যে ধরণের স্কোপিং সক্রিয় রয়েছে তা হ'ল ম্যাক্রো কলের সাইটে সক্রিয় এক (যেমন প্রয়োগ করা হয় some-function)।

একটি ম্যাক্রো জানতে পারে যে lexical-bindingভেরিয়েবলের মানটি পরীক্ষা করে যে কোডটি ফিরে আসে তার জন্য কী ধরণের স্কোপিং ব্যবহার করা হবে ।

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