Question

Je suis sûr qu'il existe une réponse simple à cela. Je n'arrive pas à le trouver. J'ai créé une fonction imbriquée dans Ruby et j'avais des difficultés à accéder aux variables de la fonction externe dans la fonction interne:

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

foo(5)

Je reçois: NameError: variable ou méthode locale non définie x 'pour main: Object`

Le code analogue Python fonctionne:

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

foo(5)

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

Était-ce utile?

La solution

Autant que je sache, définir une fonction nommée dans une fonction ne vous donne pas accès à des variables locales.

Ce que vous pouvez faire à la place est d’utiliser un Proc:

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

foo(5)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top