Middle
Was ist eine Lambda und eine Prozedur in Ruby?
sobes.tech KI
Antwort von AI
Lambda und Proc in Ruby sind Proc-Objekte, die Codeblöcke kapseln.
Die Hauptunterschiede liegen im Verhalten beim Zurückgeben von Werten und in der Anzahl der akzeptierten Argumente:
-
Lambda:
- Kontrolliert strikt die Anzahl der Argumente (wie eine normale Methode).
returninnerhalb einer Lambda gibt nur einen Wert aus ihr selbst zurück.
# Beispiel für eine Lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Fehler: falsche Argumentanzahl # lambda_proc.call(1) -
Proc:
- Weniger strikt bei der Argumentanzahl (kann keinen Fehler auslösen, wenn mehr oder weniger Argumente als erwartet vorhanden sind).
returninnerhalb eines Procs gibt einen Wert aus dem Kontext zurück, in dem es definiert wurde (wiereturnin einem Block).
# Beispiel für einen Proc proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "Rückkehr aus der Methode" } proc_proc.call "Dieser Text wird nicht angezeigt" end puts method_with_proc # Rückkehr aus der Methode # Es löst keinen Fehler bei falscher Argumentanzahl aus (obwohl das Verhalten unvorhersehbar sein kann) # proc_proc.call(1)
Vergleich:
| Merkmal | Lambda | Proc |
|---|---|---|
| Argumentkontrolle | Streng | Nicht streng |
return-Verhalten |
Gibt aus der Lambda zurück | Gibt aus dem Kontext zurück |
| Klasse | Proc (mit lambda?-Flag) |
Proc |
| Erstellung | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
In den meisten Fällen ist es vorzuziehen, Lambdas zu verwenden, um Verhaltensblöcke zu übergeben, die Methoden ähnlich sind, da sie vorhersehbareres Verhalten bei Argumenten und return aufweisen. Procs werden häufiger für niedrigstufige Aufgaben oder dort verwendet, wo ihr spezielles return-Verhalten gewünscht ist.