কোনও শুরু এবং শেষের ব্লক ছাড়াই রুবিতে কীভাবে উদ্ধার ব্যবহার করে


115

আমি একটি রেসকিউ শেষ শুরু করার মানক কৌশল সম্পর্কে জানি

কেউ কীভাবে কেবল তার নিজের উপর রেসকিউ ব্লক ব্যবহার করে।

এটি কীভাবে কাজ করে এবং কীভাবে এটি জানতে পারে যে কোন কোডটি পর্যবেক্ষণ করা হচ্ছে?


উত্তর:


223

একটি পদ্ধতি "ডিফ" একটি "শুরু" বিবৃতি হিসাবে পরিবেশন করতে পারে:

def foo
  ...
rescue
  ...
end

3
এছাড়াও, শ্রেণি সংজ্ঞা, মডিউল সংজ্ঞা এবং (আমার মনে হয়) do/ endব্লক লিটারালগুলি অন্তর্নিহিত ব্যতিক্রম ব্লক গঠন করে।
Jörg W Mittag

আপনি কি ডিফ রেসকিউও শেষ নিশ্চিত করতে পারবেন?
মোহাম্মদ হাফেজ

আপনি সম্পূর্ণরূপে
অ্যান্টনি

আপনি কি আপনার ডিএফ-তে একাধিক উদ্ধারক ব্যবহার করতে পারেন?
বিবাহিত জনে 875

@ বিবাহিতজেন 875 হ্যাঁ আপনি একাধিক উদ্ধার ব্যবহার করতে পারেন, হয় স্পষ্টভাবে (প্রতিটি রেসকিউ ক্লোজ / ব্লক নিজস্ব লাইনে) যেমন rescue TypeError; rescue NameError- বা আপনি ব্যতিক্রম শ্রেণিগুলি কমা-পৃথক করতে পারেন, যেমনrescue TypeError, NameError
কেমটুরিয়ন

48

আপনি ইনলাইনটিও উদ্ধার করতে পারেন:

1 + "str" rescue "EXCEPTION!"

"ছাড়াই!" প্রিন্ট আউট করবে! যেহেতু 'স্ট্রিং ফিক্সনামে জোর করা যায় না'


1
আপনি কীভাবে উদ্ধার করবেন এবং ব্যতিক্রম ট্র্যাক ইনলাইনটি প্রদর্শন করবেন?
সাইরিল ডুচন-ডরিস

আসল ব্যতিক্রম কীভাবে ফিরে আসবে?
ব্যবহারকারী 1735921

1
ইনলাইন রেসকিউ একটি ভাল অভ্যাস নয় কারণ এটি উদ্ধার করে StandardErrorএবং এর সমস্ত সাবক্লাসগুলি, যেমন NameError- এর অর্থ হ'ল এমনকি আপনার কোডের একটি টাইপও ত্রুটি বাড়িয়ে তুলবে না ... চিন্তাভাবনা দেখুন / ব্লগ / ডোন-t-inline-rescue-in- রুবি
ব্রুনোফ্যাকা

26

আমি অ্যাক্টিভেকর্ড বৈধকরণের সাথে ডিএফ / উদ্ধার সংমিশ্রণটি অনেক ব্যবহার করছি:

def create
   @person = Person.new(params[:person])
   @person.save!
   redirect_to @person
rescue ActiveRecord::RecordInvalid
   render :action => :new
end

আমি মনে করি এটি খুব পাতলা কোড!


19

উদাহরণ:

begin
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end

এখানে, defএকটি beginবিবৃতি হিসাবে :

def
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.