রুবিতে ব্যর্থ কীওয়ার্ডটি কী করে?


88

আমি রুবি শিখছি এবং failকীওয়ার্ডটির মুখোমুখি হয়েছি । এর মানে কী?

if password.length < 8
   fail "Password too short"
end
unless  username
   fail "No user name set"
end

8
নীচে raiseব্যতিক্রমগুলি পরিচালনা করার সময় এবং failকখন না ব্যবহার করে তা লোকেদের ব্যবহারযোগ্য তা জানার জন্য নীচের উত্তরগুলিও জরুরী ।
বালা

6
এটি কোনও কীওয়ার্ড নয়, এটি একটি পদ্ধতি।
Jörg ডব্লু মিট্টাগ


এছাড়াও নোট করুন, আপনি এগুলি একক লাইন বিবৃতি হিসাবে লিখতে পারেন: fail "Password too short" if password.length < 8এবংfail "No user name set" unless username
ফিল্ট

উত্তর:


136

রুবিতে এর failসমার্থক শব্দ raisefailশব্দ একটি পদ্ধতি Kernelমডিউল যা বর্গ দ্বারা অন্তর্ভুক্ত করা হয় Objectfailপদ্ধতি ঠিক এরূপ যেন কোন রানটাইম এরর উত্থাপন raiseশব্দ।

failপদ্ধতি তিন overloads আছে:

  • fail: RuntimeErrorএকটি ত্রুটি বার্তা ছাড়াই একটি উত্থাপন ।

  • fail(string): RuntimeErrorএকটি ত্রুটি বার্তা হিসাবে স্ট্রিং আর্গুমেন্ট সহ একটি উত্থাপন :

    fail "Failed to open file"
    
  • fail(exception [, string [, array]]): al exceptionচ্ছিক ত্রুটি বার্তা (দ্বিতীয় তর্ক) এবং কলব্যাক তথ্য (তৃতীয় যুক্তি) সহ শ্রেণীর (প্রথম যুক্তি) ব্যতিক্রম উত্থাপন করে ।

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

    fail ArgumentError, "Illegal String"
    

    আরেকটি উদাহরণ: আপনি পুরো পাস করতে পারেন ব্যাক-ট্রেস করতে failযাতে আপনি ভিতরে ট্রেস অ্যাক্সেস করতে পারেন পদ্ধতি rescueব্লক:

    fail ArgumentError, "Illegal String", caller
    

    callerএকটি কার্নেল পদ্ধতি যা ফর্মের স্ট্রিংগুলির অ্যারে হিসাবে ব্যাকট্র্যাসটি দেয় file:line: in 'method'

কোনও যুক্তি ছাড়াই the এ ব্যতিক্রম উত্থাপন! বা time! শূন্য হয় একটি একক স্ট্রিং আর্গুমেন্টের সাহায্যে বার্তা হিসাবে স্ট্রিং সহ একটি রানটাইমআরার উত্থাপন করে। অন্যথায়, প্রথম প্যারামিটারটি একটি ব্যতিক্রম শ্রেণীর নাম (বা এমন কোনও বস্তু যা একটি ব্যতিক্রম বার্তা প্রেরণে একটি ব্যতিক্রম বস্তু ফেরত দেয়) হওয়া উচিত। Alচ্ছিক দ্বিতীয় প্যারামিটারটি ব্যতিক্রমের সাথে সম্পর্কিত বার্তাটি সেট করে এবং তৃতীয় প্যারামিটারটি কলব্যাক তথ্যের একটি অ্যারে। ব্যতিক্রমগুলি শুরু ... শেষের ব্লকগুলির রেসকিউ ক্লাস দ্বারা ধরা পড়ে।

উত্স: কার্নেল মডিউলটিতে রুবি ডকুমেন্টেশন


4
আপনি 3 বুলেট পয়েন্ট দিয়ে 3 সহজ উদাহরণ দিতে পারেন? এটি আপনার উত্তরকে আরও কংক্রিট করে তুলবে .. :)
অরূপ রক্ষিত

4
বাহ, +1 crazybob এর রুবি ডক্স বেশী ভালো ruby-doc.org/core-2.0.0/Kernel.html#method-i-raise :-)))
বরিস Stitnicky

এটি আমার পক্ষে কাজ করেছে তবে রুবোকপ এটিকে রূপান্তর করেছেনraise
পল

32

রুবোকপ উভয় শব্দের ব্যবহার সম্পর্কে বলেছেন;

' ব্যতিক্রমগুলি সিগন্যাল করার failপরিবর্তে ব্যবহার করুন raise' '

' ব্যতিক্রমগুলি পুনর্বিবেচনার raiseপরিবর্তে ব্যবহার করুন fail' '

এখানে একটি উদাহরণ।

def sample
  fail 'something wrong' unless success?
rescue => e
  logger.error e
  raise
end

শৈলী পরামর্শের জন্য +1; এমনকি যদি তারা নির্ধারিতভাবে একে অপরের উদ্দেশ্যে তাদের সেটিং ব্যবহার করে থাকে তবে অভিপ্রায়টি আরও ভালভাবে সহায়তা করে
ফতুহোকু

26

fail == raise

অন্য কথায়, ত্রুটি-উত্থাপন পদ্ধতির failজন্য একটি জনপ্রিয় নাম মাত্র raise। ব্যবহার:

fail ArgumentError, "Don't argue with me!"

7

www.ruby-doc.org আপনার বন্ধু। আমি যখন গুগলছিলাম তখন rubydoc fail" কার্নেল " প্রথম হিট হয়েছিল। আমার পরামর্শ হ'ল সন্দেহ যখন হয়, তেমনি সংজ্ঞাযুক্ত স্টাফের জন্য নির্দিষ্ট উত্সে যান।


4
বুট, এটি সত্যিই একটি ব্যর্থ। ব্যর্থতার কোড উদাহরণটি হ'ল ও-ও-র থেকে অনুলিপি করুন
ভজক হার্মেকজ

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