Sobes.tech
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 return faqat 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 return qiymatni kontekstdan qaytaradi, u qayerda aniqlangan bo'lsa (blokdagi return kabi).
    # 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.