Middle
Šta je lambda i procedura u Rubyju?
sobes.tech АИ
Одговор од АИ
Lambda i procedura u Ruby su objekti Proc koji inkapsuliraju blokove koda.
Glavne razlike su u ponašanju pri vraćanju vrednosti i u broju argumenata koje prihvataju:
-
Lambda:
- Strogo kontroliše broj argumenata (kao obična metoda).
returnunutar lambda vraća vrednost samo iz same lambda.
# Primer lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Greška: neispravan broj argumenata # lambda_proc.call(1) -
Proc:
- Manje stroga u pogledu broja argumenata (može da ne izazove grešku ako je više ili manje argumenata nego što je očekivano).
returnunutar procedure vraća vrednost iz konteksta u kojem je definisana (kaoreturnu bloku).
# Primer procedure proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "povratak iz metode" } proc_proc.call "ovaj tekst neće biti prikazan" end puts method_with_proc # povratak iz metode # Ne izaziva grešku kod neispravnog broja argumenata (iako ponašanje može biti nepredvidivo) # proc_proc.call(1)
Uporedjenje:
| Karakteristika | Lambda | Proc |
|---|---|---|
| Kontrola argumenata | Stroga | Nestroga |
| `return`` ponašanje | Vraća iz lambda | Vraća iz konteksta |
| Klasa | Proc (ali sa lambda? zastavicom) |
Proc |
| Kreiranje | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
U većini slučajeva, za prenošenje blokova ponašanja sličnih metodama, preporučljivo je koristiti lambde zbog njihovog predvidljivijeg ponašanja sa argumentima i return. Proc-ovi se češće koriste za nižerazredne zadatke ili tamo gde je njihovo specifično ponašanje return poželjno.