التابع Enumerator::Lazy.new في روبي
< Ruby | Enumerator::Lazy
ينشئ التابع new كائن تعداد جديد من النوع Enumerator::Lazy. عندما يُبدَأ بتعداد (enumerate) المُعدِّد (Enumerator) -عبر استدعاء التابع force مثلًا-، سيُعدَّد الكائن المُمرَّر إلى هذا التابع وستُمرَّر كل قيمة إلى الكتلة المعطاة. يمكن للكتلة أن تعيد القيمة الناتجة باستعمال yielder.
البنية العامة
new(obj, size=nil) { |yielder, *values| ... }
المعاملات
obj
الكائن المراد تعداده عبر النمط الكسول (lazy).
size
القيمة الافتراضية هي: nil.
أمثلة
مثال على استعمال التابع new لإنشاء تابع باسم filter_map في النمط الكسول (lazy) وغير الكسول (non-lazy):
module Enumerable
def filter_map(&block)
map(&block).compact
end
end
class Enumerator::Lazy
def filter_map
Lazy.new(self) do |yielder, *values|
result = yield *values
yielder << result if result
end
end
end
(1..Float::INFINITY).lazy.filter_map{|i| i*i if i.even?}.first(5)
# => [4, 16, 36, 64, 100]
انظر أيضًا
- التابع
flat_map: يعيد كائن تعداد جديد من النوعLazyمع النتائج المتسلسلة الناتجة عن تنفيذ الكتلة المعطاة مرةً واحدةً لكل عنصر من عناصر الكائنLazyالذي استدعي معه. - التابع
to_enum: يشبه التابعKernel.to_enumباستثناء أنه يعيد مُعدِّدًا كسولًا (كائن من النوعEnumerator::Lazy).