উত্তর:
আমাদের কাছে প্রচুর বিকল্প রয়েছে।
আপনি catch
/ throw
ফাংশন থেকে প্রস্থান করতে পারেন ।
উদাহরণ:
(defun my-func ()
"thrown error"
(catch 'my-catch
(when t
(throw 'my-catch "always going to throw"))
(+ 42 1)))
আপনি ব্যবহার করতে পারেন block
এবং return-from
(যদিও আপনার প্রয়োজন হবে cl-macs
)
উদাহরণ:
(require 'cl-macs)
(defun my-func ()
"block / return-from"
(block my-func
(when t
(return-from my-func))
(+ 42 1)))
আমাদের ফাংশন হিসাবে একই নামের সাথে cl-defun
অন্তর্নিহিত block
রয়েছে, তাই আমরা block
কম দিয়ে স্টাইলটি করতে পারি ।
উদাহরণ:
(require 'cl-macs)
(cl-defun my-func ()
"cl-defun implicit block"
(when t
(return-from my-func)) ; my-func is an implicit block.
(+ 42 1)))
cl-defun
একটি উপাধি হিসাবে উপলব্ধ defun*
যা এটিতে সংজ্ঞায়িত cl.el
:
(require 'cl)
(defun* my-func ()
"defun* implicit block"
(when t
(return-from my-func)) ; my-func is an implicit block.
(+ 42 1)))
@ ইমাসফসফডার কভার করেছেন তা ছাড়াও, কেবল একটি ত্রুটি বাড়ান।
কোডটি যদি (ডায়নামিকভাবে, লেজিকভাবে নয়) ত্রুটি-পরিচালনা পরিচালনার পরিমাণ ignore-errors
বা যেমন এর মধ্যে কল করা হয় তবে এটি সাহায্য করবে না condition-case
, তবে অন্যথায় এটি কোনও ফাংশন থেকে বেরিয়ে আসার একটি দুর্দান্ত উপায়। এটি আসলে বেশিরভাগ সময়ই করা হয়।
(defun my-func ()
"..."
(unless something (error "Whoops!"))
; continue as usual...
(+ 42 1))
যদি আপনি নিজেই ত্রুটিটি পরিচালনা করতে চান তবে আপনি ক এর মধ্যে কলিং কোডটি (যেমন কলকে এমন কিছুকে কল করুন my-func
) রাখতে পারেন condition-case
। আবার, এই কি ব্যবহার হিসাবে হিসাবে প্রায়ই, বেশির ভাগ সময়ে সম্পন্ন করা হয় অন্তত হয় catch
+ + throw
। এটি আপনার কী আচরণ চান তা নির্ভর করে।
catch
, unwind-protect
, condition-case
মত দরকারী। এলিসপ ম্যানুয়ালটির পুরো বিভাগ রয়েছে ননলোকাল প্রস্থানগুলিতে নিবেদিত । (এবং এর মধ্যে আইএমও-র কোনও সম্পর্কেই বিশেষ জঘন্য কিছু নেই))
catch
/throw
এলিজপে আরও বুদ্ধিমান, কারণ অন্যান্য পদ্ধতিগুলি চূড়ান্তভাবে ধরা / নিক্ষেপের ক্ষেত্রে প্রয়োগ করা হয়। Elisp ম্যানুয়াল বলছে: "পাতার মর্মর অধিকাংশই অন্যান্য সংস্করণ প্রচলিত পাতার মর্মর সহ, nonsequentially নিয়ন্ত্রণ হস্তান্তর করার বিভিন্ন উপায় আছে:return
,return-from
, এবংgo
। উদাহরণস্বরূপ, টিপে, Emacs পাতার মর্মর শুধুমাত্র হয়েছেthrow
।"