Middle
Ruby'da lambda va protsedura nima?
sobes.tech AI
AIdan javob
Ruby'da Lambda va Proc obyektlar Proc bo'lib, ular kod bloklarini inkapsulyatsiya qiladi.
Asosiy farqlar, ularning qiymatlarni qaytarish va qabul qilinadigan argumentlar soni bilan bog'liq:
-
Lambda:
- Argumentlar sonini qat'iy nazorat qiladi (oddiy metod kabi).
- Lambda ichidagi
returnfaqat o'zidan qiymatni qaytaradi.
# Lambda misoli lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Xato: noto'g'ri argumentlar soni # lambda_proc.call(1) -
Proc:
- Argumentlar soniga kamroq qat'iy (ko'proq yoki kamroq argumentlar bo'lsa ham xato bermasligi mumkin).
- Proc ichidagi
returnqiymatni kontekstdan qaytaradi, u qayerda aniqlangan bo'lsa (blokdagireturnkabi).
# Proc misoli proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "metoddan qaytish" } proc_proc.call "bu matn ko'rsatilmaydi" end puts method_with_proc # metoddan qaytish # Noto'g'ri argumentlar soni bilan xato bermaydi (lekin xatti-harakatlar oldindan aytib bo'lmaydi) # proc_proc.call(1)
Taqqoslash:
| Xususiyat | Lambda | Proc |
|---|---|---|
| Argumentlarni nazorat qilish | Qattiq | Nisbatan erkin |
return-ning xatti-harakati |
Lambda ichidan qaytaradi | Kontekstdan qaytaradi |
| Sinf | Proc (lekin lambda? flag bilan) |
Proc |
| Yaratilishi | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Ko'p hollarda, metodlarga o'xshash xatti-harakat bloklarini uzatishda, argumentlar va return bilan yanada oldindan aytib bo'ladigan xatti-harakat uchun lambda ishlatish ma'qul. Proc'lar esa, odatda, past darajadagi vazifalar uchun yoki ularning return-ning maxsus xatti-harakatlari kerak bo'lsa, ishlatiladi.