আমি কীভাবে কোনও ব্লক থেকে কিছু তাড়াতাড়ি ফিরিয়ে আনতে পারি?


91

আমি যদি এরকম কিছু করতে চাইতাম:

collection.each do |i|
   return nil if i == 3

   ..many lines of code here..
end

আমি কিভাবে এই প্রভাব পেতে পারি? আমি জানি আমি ব্লকের ভিতরে সমস্ত কিছু যদি বড় আকারের বিবৃতিতে গুটিয়ে রাখতে পারি তবে সম্ভব হলে আমি বাসা বাঁধতে চাই।

ব্রেক এখানে কাজ করবে না, কারণ আমি অবশিষ্ট উপাদানগুলির পুনরাবৃত্তি থামাতে চাই না

উত্তর:


177

nextএকটি ব্লকের ভিতরে ব্লক থেকে ফিরে আসে। breakএকটি ব্লকের ভিতরে ফাংশন থেকে ফিরে আসে যা ব্লককে দেয়। এর eachঅর্থ এই যে breakলুপটি প্রস্থান করে এবং লুপের nextপরবর্তী পুনরাবৃত্তিতে ঝাঁপ দেয় (এইভাবে নামগুলি)। আপনি next valueএবং দিয়ে মানগুলি ফিরিয়ে দিতে পারেন break value


54
+ এর জন্য next valueএবং break value। ঠিক আমি খুঁজছেন ছিল কি.
জোশুয়া পিন্টার

4
break valueআমার জন্য কাজ করে না, ভাল কাজ করার সময় next value। অনেক ধন্যবাদ.
ফ্রান্সেস্কো বেলাদোনা

4
আমি নিশ্চিত নই যে আপনার পরবর্তী এবং বিরতির সংজ্ঞাটি সঠিক কিনা। খুব কমপক্ষে, তারা বিভ্রান্ত করছে। বিরতি অন্তঃস্থলীয় লুপটি প্রস্থান করে, পরবর্তীটি আপনাকে পরবর্তী পুনরাবৃত্তিতে নিয়ে যায়। সূত্র: টিউটোরিয়ালপয়েন্ট
রবি

4
@ ওয়াটসআইনাবক্স nextএবং কোনওভাবেই breakলুপিং নির্মাণের জন্য সুনির্দিষ্ট নয়, সুতরাং আপনি যে নিবন্ধটি সংযুক্ত করেছেন তা অত্যন্ত বিভ্রান্তিমূলক (যেহেতু এটি ভারীভাবে বিপরীতটি বোঝায়)। এবং ব্লকগুলির অভ্যন্তরে কখন nextএবং breakব্যবহার করা হয় সে সম্পর্কে আমার বিবরণগুলি অবশ্যই সঠিক (নোট করুন whileএবং forএটি খুব কমই রুবিতে ব্যবহার করা হয় তাই 99% ব্যবহার nextএবং breakব্লকের মধ্যে থাকে)।
sepp2k

আমি মনে করি আপনার বোঝানো নন-লুপিং ব্লক। এটি এ সম্পর্কে বিভ্রান্তিকর। এছাড়াও, আমি আপনার 99% জোরের সাথে একমত নই, তবে এটি একটি ভিন্ন যুক্তি।
ওয়াটসইনাবক্স

11
#!/usr/bin/ruby

collection = [1, 2, 3, 4, 5 ]

stopped_at = collection.each do |i|
   break i if i == 3

   puts "Processed #{i}"
end

puts "Stopped at and did not process #{stopped_at}"

5

এই উদাহরণস্বরূপ, আপনি লুপটি তাড়াতাড়ি শেষ করতে বিরতি ব্যবহার করতে পারেন:

collection.each do |i|
  break if i == 3
  ...many lines
end

... অবশ্যই এটি ধরে নেওয়া হচ্ছে যে আপনি আসলে কোনও মান ফিরিয়ে আনতে চাইছেন না, কেবল ব্লকটি ভেঙে দিন।


এটি কেবল ব্লক থেকে ফিরে আসবে না, এটি প্রতিটি থেকে ফিরে আসবে। সুতরাং লুপটি শেষ হবে, পরবর্তী মান দিয়ে চালিয়ে দেওয়া হবে না। নিশ্চিত যে এটি কি উদ্দেশ্য।
sepp2k

4
আপনার সাথে একটি মান ব্যবহার করতে পারেন breakরুবি মধ্যে - break 5কারণ হবে each5. ফিরে যাওয়ার
চাক

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