"ভুল টাইপের আর্গুমেন্ট: কমান্ডপ" ত্রুটি যখন কোনও ল্যাম্বডাকে একটি কীতে আবদ্ধ করে


88

আমি এখানে একটি "ভুল টাইপের আর্গুমেন্ট: কমান্ডপ, (ল্যাম্বডা নীল (ফরোয়ার্ড-লাইন 5))" পাচ্ছি।

(global-set-key [?\M-n] (lambda () (forward-line 5)))

ত্রুটি কী? আমি মোটামুটি নিশ্চিত যে এটি সহজ এবং আমি স্পষ্ট কিছু মিস করছি।


আপনি একটি বন্ধ হওয়া প্রথম বন্ধনী অনুপস্থিত। সম্ভবত আপনার কোডে না থাকলেও কেবল প্রশ্নে।
হেল্ডার এস রিবেইরো

পার্শ্ব নোট হিসাবে: আপনি যখন বেনামে ফাংশনটি উদ্ধৃত করেন তখন এটি সংকলিত হবে না। যদিও আমি মনে করি এটি আপনার ক্ষেত্রে কোনও বড় বিষয় নয়।
ফিল জ্যাকসন

উত্তর:


130

global-set-keyএকটি ইন্টারেক্টিভ কমান্ড আশা করে। (lambda () (interactive) (forward-line 5))কাজ করা উচিত।

যাইহোক, এর C-h f commandpমতো ত্রুটির জন্য একটি খুব ভাল সূচনা পয়েন্ট।


আমি মনে করি কোন নিচ পক্ষ নেই। ডকুমেন্টেশন থেকে: >> 'ইন্টারেক্টিভ' তে "কল" আসলে কোনও ফাংশনের পরিবর্তে একটি ঘোষণা; এটি 'কল-ইন্টারেক্টিভলি' বলছে কীভাবে ফাংশনে যাওয়ার জন্য আর্গুমেন্টগুলি পড়তে হয়। যখন আসলে বলা হয়, 'ইন্টারেক্টিভ' কেবল শূন্য দেয়।
ড্যাঙ্গেলভ

সুতরাং (commandp)ডকুমেন্টেশন অনুসারে , ল্যাম্বদা ফাংশনটি শীর্ষ স্তরের সাথে (interactive)কাজ করবে, তবে আমি কীভাবে একটি ফাংশনটি সংজ্ঞায়িত করতে পারি (defun)?
পেটারহিল

36

সঠিক ফর্মটি এটি হওয়া উচিত -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

সমস্যাটি ছিল আপনি রাখা ভুলে গেছেন (interactive) (ব্রেন্ডন উল্লিখিত হিসাবে)।

যাইহোক, আপনি লক্ষ্য করবেন যে আমি (kbd)কী-বাঁধাই নির্দিষ্ট করার জন্য ফাংশনটি ব্যবহার করেছি। আপনি কী-বাইন্ডিংগুলি প্রায় আক্ষরিক অর্থে রাখতে পারেন যেহেতু এই ফাংশনটি অত্যন্ত কার্যকর।


2

আমি এই ত্রুটিটি একটি নতুন মেশিনেও দেখেছি যেখানে আমি আমার সাধারণ .emacsফাইলটি ব্যবহার করছি তবে আমার প্যাকেজগুলি ইনস্টল করা হয়নি এবং কার্যকর করার আদেশটি সেই প্যাকেজগুলির মধ্যে একটিতে রয়েছে। (কারণ যে আদেশটি কার্যকর করা যায় না তা অবশ্যই ইন্টারেক্টিভ হয় না!)

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