yield Anahtar Kelimesi
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 17 / 56.
Kendi tanımladığınız metotlar, tıpkı yerleşik olanlar gibi bir blok alabilir. Metodun içinde, yield anahtar kelimesi çağıranın ilettiği bloğu çalıştırır.
def greet
puts "Before block"
yield
puts "After block"
end
greet do
puts "Hi from the block!"
end
# Blok öncesi
# Bloktan selamlar!
# Blok sonrasıArgümanları yield ifadesine vererek bloğa geçirebilirsiniz:
def with_each(items)
items.each { |item| yield item }
end
with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30Eğer bir metot yield çağırırsa ancak çağıran bir blok geçmediyse, Ruby bir hata fırlatır. block_given? önce kontrol etmenizi sağlar:
def maybe
yield if block_given?
end
maybe # hiçbir şey olmaz
maybe { puts "called!" } # çağrıldı!Görev
KolayBir n (bir tam sayı) argümanı alan ve bloğuna 1, 2, ..., n değerlerini teker teker yield eden repeat adında bir metot tanımlayın.
Ardından metodunuzu n = 4 ve yield edilen her değer için "Got <value>" yazdıran bir blok ile çağırın.
Çıktı şöyledir:
Got 1
Got 2
Got 3
Got 4Kopya kağıdı
Çağıran tarafından iletilen bloğu çalıştırmak için bir metodun içinde yield kullanın:
def greet
yield
end
greet { puts "Hi!" } # Hi!yield aracılığıyla bloğa argümanlar iletin:
def with_each(items)
items.each { |item| yield item }
end
with_each([1, 2]) { |n| puts n }yield çağırmadan önce bir blok sağlanıp sağlanmadığını kontrol etmek için block_given? kullanın:
def maybe
yield if block_given?
endKendin dene
# TODO: bloğuna 1..n yield eden `repeat` metodunu tanımlayın
# TODO: "Got <value>" yazdıran bir blok ile repeat(4) çağrısı yapın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı