Sobes.tech
Middle

Cosa sono una lambda e una procedura in Ruby?

sobes.tech AI

Risposta dell'AI

Lambda e procedura in Ruby sono oggetti Proc che incapsulano blocchi di codice.

Le principali differenze riguardano il comportamento nel restituire valori e nel numero di argomenti accettati:

  • Lambda:

    • Controlla rigorosamente il numero di argomenti (come un metodo normale).
    • return all'interno di una lambda restituisce un valore solo da essa stessa.
    # Esempio di lambda
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Errore: numero errato di argomenti
    # lambda_proc.call(1)
    
  • Proc:

    • Meno rigoroso sul numero di argomenti (potrebbe non generare errore se ci sono più o meno argomenti del previsto).
    • return all'interno di un proc restituisce un valore dal contesto in cui è stato definito (come return in un blocco).
    # Esempio di proc
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "ritorno dal metodo" }
      proc_proc.call
      "questo testo non sarà mostrato"
    end
    
    puts method_with_proc # ritorno dal metodo
    
    # Non genera errore con numero errato di argomenti (anche se il comportamento può essere imprevedibile)
    # proc_proc.call(1)
    

Confronto:

Caratteristica Lambda Proc
Controllo argomenti Rigoroso Non rigoroso
Comportamento return Ritorna dalla lambda Ritorna dal contesto
Classe Proc (ma con il flag lambda?) Proc
Creazione lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Nella maggior parte dei casi, per passare blocchi di comportamento simili ai metodi, è preferibile usare le lambda per il loro comportamento più prevedibile con argomenti e return. Le procedure sono più comunemente usate per compiti di basso livello o quando il loro comportamento specifico di return è desiderato.