التابع Enumerable.lazy
في روبي
< Ruby | Enumerable
يعيد التابع lazy
مُعدِّدًا كسولًا (lazy enumerator) تُعدِّد (enumerate) توابعه map
/collect
، و flat_map
/collect_concat
، و select
/find_all
، و rejectK
، و grep
، و grep_v
، و zip
، و take
، و take_while
، و drop
، و drop_while
القيم بحسب الحاجة. على أي حال، إن أعطيت كتلة لتجميع العناصر المكرَّرة وضغطها (zip)، فستُعدَّد القيم مباشرةً.
البنية العامة
lazy → lazy_enumerator
القيمة المعادة
يعاد مُعدِّدٌ كسول (lazy enumerator).
أمثلة
يوجد البرنامج التالي ثلاثية (مبرهنة) فيثاغورث (pythagorean triples):
def pythagorean_triples
(1..Float::INFINITY).lazy.flat_map {|z|
(1..z).flat_map {|x|
(x..z).select {|y|
x**2 + y**2 == z**2
}.map {|y|
[x, y, z]
}
}
}
end
# إظهار عشر ثلاثيات لفيثاغورث أولًا
p pythagorean_triples.take(10).force # force كسولٌ، لذا نحتاج إلى التابع take إن التابع
p pythagorean_triples.first(10) # حريص جدًا first التابع
# إظهار ثلاثيات فيثاغورث الأقل من 100
p pythagorean_triples.take_while { |*, z| z < 100 }.force
انظر أيضًا
- التابع
cycle
: يستدعي الكتلة المعطاة مع كل عنصر من عناصر المُعدِّد الذي استدعي معه عددًا محدَّدًا من المرات أو إلى ما لانهاية إن مُرِّرت القيمةnil
إليه أو لم يمُرَّر أي شيء. - التابع
each_cons
: يُكرِّر الكتلة المعطاة على كل مصفوفة منn
عنصر متتالي من عناصر الكائن القابل للتعداد الذي استدعي معه.