interfeys Variant < T > {
flatMap < U > ( f : ( qiymat : T ) => Variant < U > ) : Variant < U >
getOrElse ( qiymati : T ) : T
}
sinf Ba'zilari < T > asboblar Variant < T > { konstruktor ( xususiy qiymat : T ) {} flatMap < U > ( f : ( qiymat : T ) => Variant < U > ) : Variant < U > {
qaytish f ( bu . qiymat )
}
getOrElse () : T { qaytish bu . qiymat
}
}
sinf Yo'q asboblar Variant < hech qachon > { flatMap < U > () : Variant < U > {
qaytish bu
}
getOrElse < U > ( qiymati : U ) : U {
qaytish qiymat
}
}
Some da flatMap-ni chaqirganimizda , biz f funktsiyasiga o'tamiz , bu flatMap yangi turdagi yangi Variantni berish uchun Some qiymati bilan chaqiradi .
Some da getOrElse ni chaqirish faqat Some qiymatini qaytaradi.
None muvaffaqiyatsiz hisobni ifodalaganligi sababli , flatMap- ga qo'ng'iroq qilish har doim Yo'q ni qaytaradi : bir marta hisoblash muvaffaqiyatsiz bo'lsa, biz bu nosozlikni tiklay olmaymiz (hech bo'lmaganda bizning maxsus Option ilovamiz bilan emas).
GetOrElse- ni None -da chaqirish har doim getOrElse- ga o'tkazgan qiymatni qaytaradi .
Biz aslida bu sodda amalga oshirishdan bir qadam nariga o'tishimiz va turlarimizni yaxshiroq belgilashimiz mumkin. Agar sizda T dan Variant gacha Variant va funksiya borligini bilsangiz , u holda Variant har doim Variant ga flatMap s bo'ladi . Ammo sizda Some yoki None borligini bilsangiz , aniqroq bo'lishingiz mumkin.
7-1-jadvalda Option s ning ikkita turida flatMap-ga qo'ng'iroq qilishda biz xohlagan natija turlari ko'rsatilgan .
7-1-jadval. Some va None da .flatMap(f) ni chaqirish natijasi
Do'stlaringiz bilan baham: |