Sobes.tech
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).
    • return vo 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é).
    • return vo vnútri procedúry vracia hodnotu z kontekstu, v ktorom bola definovaná (ako return v 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.