Middle
Qu'est-ce qu'une lambda et une procédure en Ruby?
sobes.tech IA
Réponse de l'IA
Lambda et procédure en Ruby sont des objets Proc qui encapsulent des blocs de code.
Les principales différences résident dans leur comportement lors du retour de valeurs et dans le nombre d'arguments qu'ils acceptent :
-
Lambda :
- Contrôle strict du nombre d'arguments (comme une méthode normale).
returnà l'intérieur d'une lambda ne retourne une valeur que de elle-même.
# Exemple de lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Erreur : nombre incorrect d'arguments # lambda_proc.call(1) -
Proc :
- Moins strict sur le nombre d'arguments (peut ne pas générer d'erreur si plus ou moins d'arguments que prévu).
returnà l'intérieur d'un proc retourne une valeur depuis le contexte où il a été défini (commereturndans un bloc).
# Exemple de proc proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "retour du méthode" } proc_proc.call "ce texte ne sera pas affiché" end puts method_with_proc # retour du méthode # Ne génère pas d'erreur avec un nombre incorrect d'arguments (même si le comportement peut être imprévisible) # proc_proc.call(1)
Comparaison :
| Caractéristique | Lambda | Proc |
|---|---|---|
| Contrôle des arguments | Strict | Non strict |
Comportement return |
Retourne depuis la lambda | Retourne depuis le contexte |
| Classe | Proc (mais avec le drapeau lambda?) |
Proc |
| Création | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
Dans la plupart des cas, pour transmettre des blocs de comportement similaires à des méthodes, il est préférable d'utiliser des lambdas en raison de leur comportement plus prévisible avec les arguments et return. Les procédures sont plus souvent utilisées pour des tâches de bas niveau ou lorsque leur comportement spécifique de return est souhaité.