Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar
Natija: vektor v lambda bilangener_n() ga qo'ng'iroq qilgandan keyin: 1 1 2 3 5 8 13 21 34
Download 37.33 Kb.
|
Lambda ifodalari misollar bilan
Natija:
vektor v lambda bilangener_n() ga qo'ng'iroq qilgandan keyin: 1 1 2 3 5 8 13 21 34 x: 1 y: 1 fillVector() ga birinchi qo'ng'iroqdan keyin vektor v: 1 2 3 4 5 6 7 8 9 vektor v fillVector() ga ikkinchi chaqiruvdan keyin: 10 11 12 13 14 15 16 17 18 Qo'shimcha ma'lumot olish uchun bo'limga qarang. Lambda ifodalari quyidagi CLR boshqariladigan ob'ektlarda qo'llab-quvvatlanmaydi: ref klassi , ref struct , qiymat sinfi va qiymat tuzilishi . Agar siz Microsoft tizimlariga xos bo'lgan modifikatorlardan foydalansangiz, masalan, lambda ifodasiga parametr-deklaratsiya-bandidan so'ng darhol kiritishingiz mumkin, masalan: Ixtiyoriy parametr atribut-spesifikator-seq ushbu versiyada qo'llab-quvvatlanmaydi. Visual Studio C++ 11 lambda ifodasi xususiyatlariga qo'shimcha ravishda quyidagi xususiyatlarni o'z ichiga oladi: Fuqaroligi bo'lmagan lambda iboralari ixtiyoriy chaqiruv konventsiyalari bilan funksiya ko'rsatkichlariga universal tarzda aylantiriladi. ( Qaytish ifodasi; ) dan murakkabroq bo'lgan lambda iboralari tanasi uchun avtomatik ravishda chiqarilgan qaytarish turlari, agar barcha qaytarish ifodalari bir xil bo'lsa. (Bu xususiyat tavsiya etilgan C++14 standartining bir qismidir.) Displey: Yuqori darajali funktsiya - kirish argumenti sifatida boshqa funktsiyani qabul qiladigan yoki uning qaytish natijasi sifatida funksiyaga ega bo'lgan funksiya. Bunday funktsiyaning yaxshi namunasi lock() dir, u qulflangan ob'ekt va funktsiyani oladi, qulfni qo'llaydi, funktsiyani bajaradi va qulfni chiqaradi: Qiziqarli qulf(qulf: Qulf, korpus: () -> T): T( lock.lock() urinib ko'ring( tanani qaytaring() ) nihoyat ( lock.unlock() ) ) Keling, ushbu blokni tahlil qilaylik. Tana parametri funksiya turiga mansub: () -> T , ya'ni u hech qanday kirish argumentlarini olmaydigan va T tipidagi qiymatni qaytaradigan funksiya deb taxmin qilinadi. U lock bilan himoyalangan try bloki ichida chaqiriladi va uning natijasi lock() funksiyasi tomonidan qaytariladi. Fun toBeSynchronized() = sharedResource.operation() val natija = qulflash (qulflash, ::toBeSynchronized) Lambda ifodasini ishlatishning yana bir qulay usuli: Val natijasi = qulflash (qulflash, ( sharedResource.operation() )) Lambda iboralari batafsilroq tavsiflangan, ammo ushbu bo'limni davom ettirish uchun qisqacha ko'rib chiqamiz: Lambda ifodalari har doim jingalak qavslar ichiga olinadi, Ushbu ifodaning parametrlari (agar mavjud bo'lsa) -> belgisidan oldin e'lon qilinadi (parametrlarni o'tkazib yuborish mumkin), Ifodaning tanasi -> belgisidan keyin keladi. Kotlinda shunday konventsiya mavjudki, agar funktsiyaning oxirgi parametri funksiya bo'lsa va siz argument sifatida lambda ifodasidan foydalansangiz, uni qavslar tashqarisida ko'rsatishingiz mumkin: Bloklash (qulflash) ( sharedResource.operation() ) Yuqori tartibli funksiyaning yana bir misoli map() funksiyasi: Qiziqarli Roʻyxat .map (transformatsiya qilish: (T) -> R): Ro'yxat (val natija = arrayListOf () uchun (bu element) result.add(transform(element)) natijani qaytarish ) Ushbu funktsiyani quyidagicha chaqirish mumkin: Val ikki barobar = ints.map ( it -> it * 2 ) E'tibor bering, funktsiyani chaqirishda parametrlarni e'tiborsiz qoldirish mumkin, agar lambda uni chaqirish uchun yagona argument bo'lsa. Download 37.33 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling