Sobes.tech
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).
    • return uvnitř 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é).
    • return uvnitř procedury vrací hodnotu z kontextu, ve kterém byla definována (jako return v 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.