Middle
Co je to lambda a procedura v Ruby?
sobes.tech AI
Odpověď od AI
Lambda a procedura v Ruby jsou objekty Proc, které zapouzdřují bloky kódu.
Hlavní rozdíly spočívají v chování při vracení hodnot a v počtu přijímaných argumentů:
-
Lambda:
- Přísně kontroluje počet argumentů (jako běžná metoda).
returnuvnitř lambda vrací hodnotu pouze z ní samotné.
# Příklad lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Chyba: nesprávný počet argumentů # lambda_proc.call(1) -
Proc:
- Méně přísný v počtu argumentů (nemusí vyvolat chybu, pokud je jich více nebo méně než očekávané).
returnuvnitř procedury vrací hodnotu z kontextu, ve kterém byla definována (jakoreturnv bloku).
# Příklad procedury proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "návrat z metody" } proc_proc.call "tento text se nezobrazí" end puts method_with_proc # návrat z metody # Nevyvolá chybu při nesprávném počtu argumentů (ačkoliv chování může být nepředvídatelné) # proc_proc.call(1)
Porovnání:
| Charakteristika | Lambda | Proc |
|---|---|---|
| Kontrola argumentů | Přísná | Nepřísná |
Chování return |
Vrací z lambda | Vrací z kontextu |
| Třída | Proc (ale s příznakem lambda?) |
Proc |
| Vytvoření | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Ve většině případů je vhodnější používat lambdy pro předávání bloků chování podobných metodám, kvůli jejich předvídatelnějšímu chování s argumenty a return. Proc se častěji používají pro nízkoúrovňové úkoly nebo tam, kde je žádoucí jejich specifické chování return.