41 votes

Ruby accède aux variables externes dans une fonction imbriquée

Je suis sûr qu'il existe une réponse simple à cette question, mais je n'arrive pas à la trouver. J'ai créé une fonction imbriquée en Ruby, et j'avais du mal à accéder aux variables de la fonction externe à l'intérieur de la fonction interne :

def foo(x)
  def bar
    puts x
  end
  bar
  42
end

foo(5)

J'ai compris : NameError: undefined local variable or method x' pour main:Object`

Le code Python analogue fonctionne :

def foo(x):
  def bar():
    print x
  bar()
  return 42

foo(5)

Alors comment puis-je faire la même chose en Ruby ?

48voto

tadman Points 70178

Pour autant que je sache, définir une fonction nommée à l'intérieur d'une fonction ne vous donne pas accès aux variables locales.

Ce que vous pouvez faire à la place, c'est utiliser un Proc :

def foo(x)
  bar = lambda do
    puts x
  end
  bar.call
  42
end

foo(5)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X