التابع 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
).