Sobes.tech
Middle

Šta je lambda i procedura u Rubyju?

sobes.tech АИ

Одговор од АИ

Lambda i procedura u Ruby su objekti Proc koji inkapsuliraju blokove koda.

Glavne razlike su u ponašanju pri vraćanju vrednosti i u broju argumenata koje prihvataju:

  • Lambda:

    • Strogo kontroliše broj argumenata (kao obična metoda).
    • return unutar lambda vraća vrednost samo iz same lambda.
    # Primer lambda
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Greška: neispravan broj argumenata
    # lambda_proc.call(1)
    
  • Proc:

    • Manje stroga u pogledu broja argumenata (može da ne izazove grešku ako je više ili manje argumenata nego što je očekivano).
    • return unutar procedure vraća vrednost iz konteksta u kojem je definisana (kao return u bloku).
    # Primer procedure
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "povratak iz metode" }
      proc_proc.call
      "ovaj tekst neće biti prikazan"
    end
    
    puts method_with_proc # povratak iz metode
    
    # Ne izaziva grešku kod neispravnog broja argumenata (iako ponašanje može biti nepredvidivo)
    # proc_proc.call(1)
    

Uporedjenje:

Karakteristika Lambda Proc
Kontrola argumenata Stroga Nestroga
`return`` ponašanje Vraća iz lambda Vraća iz konteksta
Klasa Proc (ali sa lambda? zastavicom) Proc
Kreiranje lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

U većini slučajeva, za prenošenje blokova ponašanja sličnih metodama, preporučljivo je koristiti lambde zbog njihovog predvidljivijeg ponašanja sa argumentima i return. Proc-ovi se češće koriste za nižerazredne zadatke ili tamo gde je njihovo specifično ponašanje return poželjno.