Middle
Čo je to lambda a procedúra v Ruby?
sobes.tech AI
Odpoveď od AI
Lambda a procedúra v Ruby sú objekty Proc, ktoré inkapsulujú bloky kódu.
Hlavné rozdiely spočívajú v ich správaní pri vracaní hodnôt a v počte prijímaných argumentov:
-
Lambda:
- Prísne kontroluje počet argumentov (ako bežná metóda).
returnvo vnútri lambda vracia hodnotu iba z nej samotnej.
# Príklad lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Chyba: nesprávny počet argumentov # lambda_proc.call(1) -
Proc:
- Menej prísny v počte argumentov (nemusí spôsobiť chybu, ak je ich viac alebo menej ako očakávané).
returnvo vnútri procedúry vracia hodnotu z kontekstu, v ktorom bola definovaná (akoreturnv bloku).
# Príklad procedúry proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "návrat z metódy" } proc_proc.call "tento text sa nezobrazí" end puts method_with_proc # návrat z metódy # Nevyvoláva chybu pri nesprávnom počte argumentov (hoci správanie môže byť nepredvídateľné) # proc_proc.call(1)
Porovnanie:
| Charakteristika | Lambda | Proc |
|---|---|---|
| Kontrola argumentov | Prísna | Neprísna |
return-ové správanie |
Vracia z lambda | Vracia z kontextu |
| Trieda | Proc (ale s flagou lambda?) |
Proc |
| Vytvorenie | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Vo väčšine prípadov je vhodnejšie používať lambdy na odovzdávanie blokov správania podobných metódam, kvôli ich predvídateľnejšiemu správaniu s argumentmi a return. Proc-ové bloky sa častejšie používajú na nižšej úrovni alebo tam, kde je žiaduce ich špecifické správanie return.