Domanda

Sono sicuro che ci sia una risposta semplice per questo; Non riesco proprio a trovarlo. Ho creato una funzione nidificata in Ruby e non riesco ad accedere alle variabili dalla funzione esterna all'interno della funzione interna:

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

foo(5)

Ottengo: NameError: variabile o metodo locale non definito x 'per main: Object`

L'analogo codice Python funziona:

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

foo(5)

Quindi, come posso fare la stessa cosa in Ruby?

È stato utile?

Soluzione

Per quanto ne so, la definizione di una funzione con nome all'interno di una funzione non ti dà accesso a nessuna variabile locale.

Quello che puoi fare invece è usare un Proc:

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

foo(5)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top