Pregunta

Estoy seguro de que hay una respuesta simple para esto; Parece que no puedo encontrarlo. Hice una función anidada en Ruby y tenía problemas para acceder a las variables desde la función externa dentro de la función interna:

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

foo(5)

Obtengo: NameError: variable o método local indefinido x 'para main: Object`

El código análogo de Python funciona:

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

foo(5)

Entonces, ¿cómo hago lo mismo en Ruby?

¿Fue útil?

Solución

Hasta donde yo sé, definir una función con nombre dentro de una función no le da acceso a ninguna variable local.

Lo que puedes hacer es usar un Proc:

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

foo(5)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top