Sobes.tech
Middle

Mi az a lambda és a procedúra Ruby-ben?

sobes.tech MI

Válasz az MI-től

Ruby-ban a lambda és a procedure Proc objektumok, amelyek kódrészleteket zárnak magukba.

A fő különbségek a visszatérési viselkedésben és az elfogadott argumentumok számában rejlenek:

  • Lambda:

    • Szigorúan ellenőrzi az argumentumok számát (mint egy normál metódus).
    • A lambda belsejében a return csak önmagából ad vissza értéket.
    # Lambda példa
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Hiba: helytelen argumentumszám
    # lambda_proc.call(1)
    
  • Proc:

    • Kevésbé szigorú az argumentumok számát illetően (nem okoz hibát, ha több vagy kevesebb argumentum van, mint várható).
    • A return a proc belsejében a környezetéből ad vissza értéket, ahol definiálták (mint a return egy blokkban).
    # Proc példa
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "metódusból való visszatérés" }
      proc_proc.call
      "ez a szöveg nem fog megjelenni"
    end
    
    puts method_with_proc # metódusból való visszatérés
    
    # Nem okoz hibát a helytelen argumentumszám, bár viselkedése kiszámíthatatlan lehet
    # proc_proc.call(1)
    

Összehasonlítás:

Jellemző Lambda Proc
Argumentum ellenőrzés Szigorú Nem szigorú
return viselkedés Lambda-ból visszatér Kontextusból visszatér
Osztály Proc (de lambda? zászlóval) Proc
Létrehozás lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

A legtöbb esetben, a metódusokhoz hasonló viselkedésű blokkok átadásához, előnyösebb lambdákat használni, mivel azok viselkedése előre kiszámíthatóbb az argumentumok és a return szempontjából. A proc-okat inkább alacsony szintű feladatokra vagy ott használják, ahol a return speciális viselkedése kívánatos.