Middle
Kas yra lambda ir procedūra Rubyje?
sobes.tech AI
Atsakymas iš AI
Lambdas ir procedūros Ruby — tai Proc objektai, kurie įkapsuliuoja kodo bloką.
Pagrindiniai skirtumai susiję su grąžinimo reikšmėmis ir priimamų argumentų skaičiumi:
-
Lambda (Lambda):
- Griežtai kontroliuoja argumentų skaičių (kaip įprastas metodas).
- Lambda viduje
returngrąžina tik iš jos pačios reikšmę.
# Lambda pavyzdys lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Klaida: netinkamas argumentų skaičius # lambda_proc.call(1) -
Procedūra (Proc):
- Mažiau griežtai kontroliuoja argumentų skaičių (gali nekelti klaidos, jei argumentų daugiau arba mažiau nei tikėtasi).
- Procedūros viduje
returngrąžina reikšmę iš konteksto, kuriame ji apibrėžta (kaip bloke).
# Procedūros pavyzdys proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "grįžimas iš metodo" } proc_proc.call "šis tekstas nebus parodytas" end puts method_with_proc # grįžimas iš metodo # Klaidos dėl netinkamo argumentų skaičiaus neįvyksta (gali būti nenuspėjama) # proc_proc.call(1)
Palyginimas:
| Savybė | Lambda (Lambda) | Procedūra (Proc) |
|---|---|---|
| Argumentų kontrolė | Griežta | Nereglamentuota |
return elgsena |
Grąžina tik iš jos pačios | Grąžina iš konteksto |
| Klasė | Proc (bet su lambda? žyma) |
Proc |
| Kūrimo būdas | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Dažniausiai, patogiau naudoti lambdas, kai perduodate blokus, kurie panašūs į metodus, nes jų elgsena yra labiau prognozuojama su argumentais ir return. Procedūros dažniau naudojamos žemesnio lygio užduotims arba tada, kai jų specifinė return elgsena yra pageidaujama.