ফাংশন এবং ভেরিয়েবলগুলি থেকে ডকাস্ট্রিংগুলি কীভাবে পুনরুদ্ধার করবেন?


11

আমি এমন একটি ফাংশন লেখার চেষ্টা করছি যা মেলে এমন কোনও ফাইলের যে কোনও সেক্সপ থেকে ডকাস্ট্রিংগুলি পুনরুদ্ধার করবে (def.*)

আমি উভয়ই কোনও ফাংশন / ম্যাক্রোগুলি, পাশাপাশি সংজ্ঞায়িত যে কোনও ভেরিয়েবলগুলি পুনরুদ্ধার করতে সক্ষম হতে চাই। ভেরিয়েবলের জন্য আমি ডক্টরসিং চাই, যখন কোনও ফাংশনের জন্য আমি যুক্তি তালিকাও চাই।


1
স্পষ্ট করার জন্য: আপনার কাছে কি একটি এলিস্প উত্স ফাইল (আমার ব্যাখ্যা) আছে, বা আপনার বর্তমান ইমাস পরিবেশে (কনস্ট্যান্টাইনের ব্যাখ্যা) একটি ভেরিয়েবল এবং ফাংশন রয়েছে? এবং যদি প্রথম ব্যাখ্যাটি হয়, আপনি কি (def…)কেবল শীর্ষ স্তরের চশমা নয়, সমস্ত সেক্সপসকে সত্যই চান ? অথবা ফাংশন এবং ভেরিয়েবলগুলির মধ্যবর্তী ব্যাখ্যা যা ফাইলটি লোড করা হলে সংজ্ঞায়িত হবে? বা আরও স্বাচ্ছন্দ্যযুক্ত সংজ্ঞা যেমন এর মতো শীর্ষ-স্তরের ফর্মগুলি অন্তর্ভুক্ত করে (when nil (defun …)))?
গিলস'স'-দুষ্ট হওয়া বন্ধ করুন '

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

দ্বিতীয় ব্যাখ্যার সাথে, অন্তর্নির্মিত describe-functionএবং বন্ধুরা আপনি যা চান তার বেশ ভাল অংশ করে (ডক্ট্রিং এবং আর্গুমেন্টের তালিকা)।
টি। ভেরন

উত্তর:


10

লক্ষ্যটি যদি ইতিমধ্যে পরিবেশে ফাংশন এবং ভেরিয়েবল সম্পর্কে তথ্য পাওয়া যায় :

  • ফাংশন এবং ম্যাক্রোগুলির ডকাস্ট্রিংয়ের জন্য, ফাংশনটি দেখুন documentation

  • পরিবর্তনশীল ডকাস্ট্রিংয়ের জন্য, ব্যবহার করুন documentation-property; উদাহরণ স্বরূপ:

    (documentation-property
     'user-init-file 'variable-documentation)
    
  • ফাংশন শালীনতা এবং যুক্তি তালিকার জন্য, এই Emacs.SE প্রশ্ন , উত্তর এবং প্রশ্নের মন্তব্য দেখুন।

(আমি C-h k C-h fসোর্স কোড টিপে এবং describe-functionস্কিম করে এটি পেয়েছি (ভেরিয়েবল ডকাস্ট্রিংয়ের জন্য একই, তবে অধ্যয়নরত describe-variable।))

একটি ইমাস লিস্প উত্স কোড ফাইল বিশ্লেষণ করতে, ধরে নেওয়া যে লক্ষ্যটি শীর্ষ-স্তরের def.*ফর্মগুলি সম্পর্কে তথ্য পাওয়া যায়, নীচের মতো কিছু করতে পারে।

(defun get-defun-info (buffer)
  "Get information about all `defun' top-level sexps in a buffer
BUFFER. Returns a list with elements of the form (symbol args docstring)."
  (with-current-buffer buffer
    (save-excursion
      (save-restriction
        (widen)
        (goto-char (point-min))
        (let (result)
          ;; keep going while reading succeeds
          (while (condition-case nil
                     (progn
                       (read (current-buffer))
                       (forward-sexp -1)
                       t)
                   (error nil))
            (let ((form (read (current-buffer))))
              (cond
               ((not (listp form))      ; if it's not a list, skip it
                nil)
               ((eq (nth 0 form) 'defun) ; if it's a defun, collect info
                (let ((sym (nth 1 form))
                      (args (nth 2 form))
                      (doc (when (stringp (nth 3 form)) (nth 3 form))))
                  (push (list sym args doc) result))))))
          result)))))

এই সহজেই বাড়ানো যেতে পারে defvar, defconstইত্যাদি

শীর্ষ-স্তরের ফর্মগুলির ভিতরেdefun উপস্থিত হ্যান্ডেল করতে একজনকে সম্ভবত এই পুনরাবৃত্তি ব্যবহার করে এই ফর্মগুলির মধ্যে নামতে হবে


2
পাঠকদের কীভাবে এই তথ্যটি নিজেরাই সন্ধান করতে হয় তার জন্য +1। আপনি যে দুটি শিখিয়েছিলেন সেগুলির এটিই আরও গুরুত্বপূর্ণ পাঠ।
ড্রিউ

@ ড্রয় এটি প্রদর্শিত হয় যে আমরা একটি অদ্ভুত পরিস্থিতিতে রয়েছি: এই সাইটের লক্ষ্য নিজেকে অপ্রচলিত করা ... এটি চ্যাটে একটি আকর্ষণীয় আলোচনা করবে :)
সান অলরেড

4
@ সানআলার্ড লোকেদের শিখিয়ে দেওয়া প্রশ্নগুলি থামায় না, এটি কেবল তাদের আরও উন্নত করে।
মালাবারবা

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

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