yield from ile delegasyon
yield from ile başka bir generator veya diziyi delegasyonla aktarmayı öğrenirsin.
yield from nedir?
yield from başka bir generator'ı, diziyi veya Traversable nesneyi delege eder. İç generator'ın tüm değerlerini tek tek yayar; her birini ayrı yazmak yerine tek satırda aktarır.
Bu, iç içe generator'lar kurmayı sağlar. Bir dış generator, birden fazla alt generator'ı sırayla çağırıp değerlerini tek akış halinde yayabilir.
İç içe generator'lar
Bir generator, yield from ile başka bir generator'ı çağırabilir. Dış generator, iç generator'ın tüm değerlerini kendi değerleri gibi yaymaya devam eder.
Bu, kod tekrarını azaltır ve görevleri küçük parçalara bölmeyi sağlar. Her alt generator kendi sorumluluğunu taşır; dış generator yalnızca akışı birleştirir.
Uygulama yield from ile delegasyon
inner(): \Generator fonksiyonu yaz: 'x', 'y', 'z' değerlerini yield ile üret. outer(): \Generator fonksiyonu yaz: yield from inner() ile inner'ı delege et, sonra 'w' değerini yield ile üret. foreach ile outer() yinele ve her değeri yazdır.
Örnek çözümü göster
inner fonksiyonunda 'x', 'y', 'z' değerlerini yield ile üret. outer fonksiyonunda önce yield from inner(); ile delege et, sonra yield 'w'; ekle. Sonra foreach (outer() as $value) ile yinele ve echo $value . "\n"; yaz.
Örnek çözüm:
<?php
function inner(): \Generator {
yield "x";
yield "y";
yield "z";
}
function outer(): \Generator {
yield from inner();
yield "w";
}
foreach (outer() as $value) {
echo $value . "\n";
}
Kendini test et
-
yield from kavramlarını eşleştir
- yield from
- Başka generator'ı delege eder
- yield
- Tek bir değer üretir
- yield from $arr
- Dizinin tüm elemanlarını yayar
-
yield from $arr ne yapar?
- Dizinin yalnızca ilk elemanını üretir
- Dizinin tüm elemanlarını tek tek üretir
- Diziyi yeni bir generator'a kopyalar
- Hiçbir şey yapmaz
Cevabı göster
Dizinin tüm elemanlarını tek tek üretir — Doğru. yield from $arr dizinin her elemanını sırayla yield ile üretir.
-
outer, inner'ı delege etsin
function inner(): \Generator { yield 'a'; yield 'b'; } function outer(): \Generator { ____ inner(); yield 'c'; }Cevabı göster
function inner(): \Generator { yield 'a'; yield 'b'; } function outer(): \Generator { yield from inner(); yield 'c'; }