হুক কি?


8

কেবল স্পষ্ট করার জন্য ... উদাহরণস্বরূপ, এই দস্তাবেজে :

একটি হুক একটি লিস্প ভেরিয়েবল যা ফাংশনগুলির একটি তালিকা ধারণ করে, কোনও নির্দিষ্ট সংজ্ঞাযুক্ত অনুষ্ঠানে ডাকা হয়। (একে হুক চালানো বলা হয়।) তালিকার পৃথক ফাংশনগুলিকে হুকের হুক ফাংশন বলা হয়। উদাহরণস্বরূপ, হুক kill-emacs-hookEmacs থেকে বেরিয়ে আসার ঠিক আগে চলে ...

আমি মনে করি এটি বলছে যে এখানে একটি ভেরিয়েবল (চিহ্ন) রয়েছে kill-emacs-hookযা "হুক ফাংশন" এর একটি সেটের প্রতিনিধিত্ব করে যা চালিত হবে যখন kill-emacs-hookমূল্যায়ন করা হবে, যার ফলে সেই ফাংশনগুলি সম্পাদন করবে। সঠিক? তারপর

(add-hook 'text-mode-hook 'auto-fill-mode)

ইতিমধ্যে সেখানে উপস্থিত ছাড়াও auto-fill-modeচিহ্নিত তালিকায় যুক্ত করা হচ্ছে text-mode-hook। ভাল. এখন এই

(defcustom text-mode-hook nil
  "Normal hook run when entering Text mode and many related modes."
  :type 'hook
  :options '(turn-on-auto-fill flyspell-mode)
  :group 'wp)

যেখানে মনে হয় আমরা হয় তৈরি বা পরিবর্তন করছি text-mode-hook। হুকের প্রকৃতি এবং তাদের সম্পর্কের বিষয়ে আমি এখন বিভ্রান্ত defcustom। আমার যৌক্তিক পছন্দটি হ'ল এই কোডটি একটি ভেরিয়েবল তৈরি করছে text-mode-hookযা "টাইপ" এর (এলিজপের ধরণের দ্বারা কী বোঝায় তা জানে না) hook। এটি কি প্রকৃতপক্ষে হুকের প্রাথমিক সৃষ্টি হওয়ার কথা text-mode-hook? যদি তা হয় তবে "অপশনগুলি" কী হবে? এইগুলি অনুমিত হুক ফাংশন, বা অন্য কিছু?


1
আপনার লিঙ্ক থেকে: «বিকল্প: কীওয়ার্ডটি ভেরিয়েবলের জন্য প্রস্তাবিত মানের তালিকা নির্দিষ্ট করে। সাধারণত:: বিকল্পগুলি হুকের জন্য প্রযোজ্য। তালিকাটি কেবল একটি পরামর্শ; এটি একচেটিয়া নয়; যে ব্যক্তি পরিবর্তনশীল সেট করে তা অন্য মানগুলিতে সেট করতে পারে; নিম্নলিখিতটি দেখানো তালিকাটি: বিকল্প কীওয়ার্ডটি ব্যবহারকারীর পক্ষে সুবিধাজনক পছন্দগুলি সরবরাহ করার উদ্দেশ্যে »
সিদ্ধেকিন

উত্তর:


6

হুক সম্পর্কে ইমাস লিস্প ধারণা সম্পর্কে আপনার উপলব্ধি একেবারে সঠিক। আসলে, "সাধারণ" হুকগুলি কেবল ফাংশনগুলির তালিকা (প্রতিটি ফাংশন আর্গুমেন্ট গ্রহণ করে না, অন্যথায় এটি সাধারণত ইমাক লিস্পে "হুক" বা "সাধারণ হুক" বলা হয় না)।

এই ভেরিয়েবলের বেশিরভাগের নাম শেষ হয় -hook। তারা সাধারণ হুক হয়, এর মাধ্যমে চালিত হয় run-hooks। যেমন একটি হুক মান ফাংশনগুলির একটি তালিকা; ফাংশনগুলিকে কোনও যুক্তি ছাড়াই ডাকা হয় এবং তাদের মানগুলি সম্পূর্ণ উপেক্ষা করা হয়। যেমন একটি হুক একটি নতুন ফাংশন রাখার প্রস্তাবিত উপায় কল করা হয় add-hook

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

কাস্টমাইজেশন ইন্টারফেস একটি পৃথক জিনিস। defvarএবং এর মধ্যে সমস্ত পার্থক্য defcustomহ'ল পরেরটি ব্যবহারকারীকে "কাস্টমাইজ" ইন্টারফেসের মাধ্যমে পরিবর্তনশীল সম্পাদনা করতে দেয়। এই ইন্টারফেস ডেটা নির্দিষ্ট প্রকারের সম্পাদনা তুমি বলতে চাচ্ছ যে সুতরাং উদাহরণস্বরূপ, সহজতর করতে :typeএর text-mode-hookহয় hook, তাহলে স্বনির্ধারণ ইন্টারফেস নিশ্চিত করে তোলে যে text-mode-hookসবসময় ফাংশন একটি তালিকা রয়েছে। তদ্ব্যতীত, আপনি যুক্তি সহ কোন বিকল্পগুলি বাঞ্ছনীয় তা নির্দিষ্ট করতে পারেন :options

সুতরাং, আপনার বোঝাপড়াটি সঠিক এবং defcustomএর বিকল্পগুলি ইমা্যাকসকে নির্দেশ দেওয়ার একমাত্র উপায়, সুতরাং যখন সে "কাস্টমাইজ" ইন্টারফেস ব্যবহার করবে তখন ব্যবহারকারীকে আরও সহায়তা করা যায়।


তবে এর উদাহরণটি defcustomদুর্দান্ত নয় কারণ text-mode-hookইতিমধ্যে বিদ্যমান; এটি ইতিমধ্যে অন্তর্ভুক্ত করা হয়েছে। রাইট? এখন, যদি আমি আমার নিজস্ব মোডটি লিখি এবং তারপরে কাস্টমাইজেশন চাই, আমি এটি করতাম। আমার বিভ্রান্তি হ'ল এই উদাহরণটি সত্যই তৈরি করছে text-mode-hook, এটি পরিবর্তন করছে না। এটা কি সঠিক বোঝাপড়া? এবং যদি এটি সত্যিই একটি নতুন তৈরি করছে text-mode-hook, তাহলে :optionsসেই দুটি ফাংশন অফার করে add-hookদিচ্ছে তালিকায় একটি করার বিকল্প ?
147

@ 147 pm, এই উদাহরণটি আপনাকে কেবল ইমামসের বিদ্যমান কোডের কিছু অংশ কাস্টমাইজ ভেরিয়েবলের সংজ্ঞা দেয় যা হুককে উপস্থাপন করে। সংক্ষেপে defcustomকেবল নতুন ভেরিয়েবলগুলি সংজ্ঞায়িত করে। এই নির্দিষ্ট উদাহরণ text-mode-hookতৈরি করা হয় এবং এর প্রাথমিক মান হয় nil। কাস্টমাইজেশন ইন্টারফেসকে আরও বলা হয় যে এই তালিকায় থাকা প্রস্তাবিত মানগুলি হ'ল turn-on-auto-fillএবং flyspell-mode। আপনি যাইহোক text-mode-hookপ্রোগ্রামযুক্ত হিসাবে আপনার পছন্দসই কিছুতে সেট করতে পারেন , এটি স্বাভাবিক পরিবর্তনশীল। আপনি add-hookঅন্য কোনও ফাংশন দিয়েও ব্যবহার করতে পারেন ।
মার্ক কার্পভ

@ 147, অন্য কথায়, সমস্ত কীওয়ার্ড আর্গুমেন্টগুলি কাস্টমাইজেশন সিস্টেমের জন্য কেবল ইঙ্গিত, তারা এর বাইরে কোনও পার্থক্য করে না। ইঙ্গিতগুলি ছাড়াই কোডটির পরিমাণ (defvar text-mode-hook nil)
মার্ক কার্পভ

তবে defcustomএভাবেই কি প্রাথমিকভাবে হুক তৈরি করা হচ্ছে? এটি দেখতে কেমন লাগে। অন্য কথায় এই উদাহরণটি কোথাও ইমাকস কোডের অন্ত্রের গভীর থেকে নেওয়া হয়েছে।
147

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