Sobes.tech
Middle

Kas ir lambda un procedūra Ruby?

sobes.tech AI

Atbilde no AI

Lambdas un procedūras Ruby — tas ir Proc objekti, kas ietver koda bloku.

Galvenās atšķirības ir saistītas ar atgriešanas vērtībām un pieņemto argumentu skaitu:

  • Lambda (Lambda):

    • Stingri kontrolē argumentu skaitu (kā parasti metode).
    • Lambda iekšienē return atgriež tikai no tās pašas vērtību.
    # Lambda piemērs
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Kļūda: nepareizs argumentu skaits
    # lambda_proc.call(1)
    
  • Procedūra (Proc):

    • Mazāk stingri kontrolē argumentu skaitu (var neizraisīt kļūdu, ja argumentu ir vairāk vai mazāk nekā gaidīts).
    • Procedūras iekšienē return atgriež vērtību no konteksta, kur tas tika definēts (kā blokā).
    # Procedūras piemērs
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "atgriešana no metodes" }
      proc_proc.call
      "šis teksts netiks parādīts"
    end
    
    puts method_with_proc # atgriešanās no metodes
    
    # Neizraisa kļūdu nepareiza argumentu skaita dēļ (var būt nenoteikts)
    # proc_proc.call(1)
    

Salīdzinājums:

Īpašība Lambda (Lambda) Procedūra (Proc)
Argumentu kontrole Stingra Nav stingra
return darbība Atgriež tikai no tās pašas Atgriež no konteksta
Klase Proc (ar lambda? zīmi) Proc
Izveides veids lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Visbiežāk, ir labāk izmantot lambdas, kad nodod blokus, kas ir līdzīgi metožu darbībai, jo to uzvedība ir paredzamāka ar argumentiem un return. Procedūras biežāk tiek izmantotas zemākā līmenī vai tad, kad ir nepieciešama to specifiskā return uzvedība.