التابع Enumerable.slice_after
في روبي
يقطِّع التابع slice_after
عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد نهايتها عبر نمطٍ محدِّدٍ أو كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.
البنية العامة
slice_after(pattern) → an_enumerator
slice_after { |elt| bool } → an_enumerator
إن كان النمط مطابقًا للعنصر (أي يعيد pattern === elt
القيمة true
) أو أعادت الكتلة القيمة true
للعنصر المُمرَّر إليها، فسيُعدُّ العنصر نهايةً لجزء. يُستدعَى المعامل ===
والكتلة block
من أول عنصر وحتى آخر عنصر من عناصر الكائن القابل للتعداد المعطى.
يُنتِج المُعدِّد المعاد العناصر المُجزَّأة كمصفوفة. لذلك، يمكن استدعاء التابع each
بالشكل التالي:
enum.slice_after(pattern).each { |ary| ... }
enum.slice_after { |elt| bool }.each { |ary| ... }
يمكن أيضًا استعمال توابع الصنف Enumerator
والوحدة Enumerable
مثل التابع map
وغيره.
المعاملات
pattern
النمط المراد مطابقته للعناصر لتحديد نهايات الأجزاء المراد تقطيع عناصر الكائن المعطى إليها.
القيمة المعادة
يعاد مُعدِّد لكل جزء من الأجزاء المُقطَّعة.
أمثلة
مثال على تجميع أسطر مستمرة باستعمال التابع slice_after
:
lines = ["foo\n", "bar\\\n", "baz\n", "\n", "qux\n"]
e = lines.slice_after(/(?<!\\)\n\z/)
p e.to_a
#=> [["foo\n"], ["bar\\\n", "baz\n"], ["\n"], ["qux\n"]]
p e.map {|ll| ll[0...-1].map {|l| l.sub(/\\\n\z/, "") }.join + ll.last }
#=>["foo\n", "barbaz\n", "\n", "qux\n"]
انظر أيضًا
- التابع
chunk
: يُمرِّر كل عنصر من عناصر المجموعة التي استدعيت معه إلى الكتلة المعطاة ثمَّ يُقطِّعها إلى أجزاء (قطع صغيرة) بحسب القيمة المعادة من الكتلة. - التابع
reduce
: يجمع جميع عناصر الكائن القابل للتعداد الذي استدعي معه عبر تطبيق عملية ثنائية تُحدَّد بوساطة كتلة أو رمز يسمي تابعًا أو معاملًا.
- التابع
slice_before
: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر نمطٍ محدِّدٍ أو كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة. - التابع
slice_when
: يقطِّع عناصر الكائن القابل للتعداد إلى أجزاء تحدَّد بدايتها عبر كتلةٍ معطاةٍ ثم يعيد مُعدِّد لكل جزء من الأجزاء الناتجة.