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
returncsak ö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
returna proc belsejében a környezetéből ad vissza értéket, ahol definiálták (mint areturnegy 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.