التابع Enumerator.each في روبي

من موسوعة حسوب

يتكرر التابع each عبر الكتلة المعطاة وفقًا للكائن المُعدِّد الذي استدعي معه والطريقة التي أُنشِئ بها. إن لم تُعطَ أية كتلة أو لم يُمرَّر أي شي إلى التابع، فسيعيد الكائن الذي استدعي معه نفسه.

البنية العامة

each { |elm| block }  obj
each  enum
each(*appending_args) { |elm| block }  obj
each(*appending_args)  an_enumerator

المعاملات

appending_args

معاملات يراد إضافتها إلى الكائن المعطى.

القيمة المعادة

يعاد الناتج الذي ستعيده الكتلة block بعد تكرارها على كل قيمة من قيم الكائن المُعدِّد المعطى، أو يعاد الكائن المُعدِّد نفسه إن لم تُعطَ الكتلة block ولم يمرَّر المعامل appending_args، أو يعاد كائن تعداد من النوع Enumerator إن أعطي المعامل appending_args دون الكتلة.

أمثلة

مثال على استعمال التابع each:

"Hello, world!".scan(/\w+/)                     #=> ["Hello", "world"]
"Hello, world!".to_enum(:scan, /\w+/).to_a      #=> ["Hello", "world"]
"Hello, world!".to_enum(:scan).each(/\w+/).to_a #=> ["Hello", "world"]

obj = Object.new

def obj.each_arg(a, b=:b, *rest)
  yield a
  yield b
  yield rest
  :method_returned
end

enum = obj.to_enum :each_arg, :a, :x

enum.each.to_a                  #=> [:a, :x, []]
enum.each.equal?(enum)          #=> true
enum.each { |elm| elm }         #=> :method_returned

enum.each(:y, :z).to_a          #=> [:a, :x, [:y, :z]]
enum.each(:y, :z).equal?(enum)  #=> false
enum.each(:y, :z) { |elm| elm } #=> :method_returned

انظر أيضًا

  • التابع each_with_index: يشبه التابع with_index باستثناء أنه لا يوجد إزاحة بادئة لبدء العملية عند قيمة محدَّدة.
  • التابع each_with_object: يكرر الكتلة المعطاة على كل عنصر من عناصر الكائن الذي استدعي معه مع كائن آخر اعتباطي (الكائن المُمرَّر إليه).

مصادر