Jestem pewien, że istnieje prosta odpowiedź; Po prostu nie mogę tego znaleźć. Zrobiłem zagnieżdżonych funkcji w Ruby i miałem problemy z uzyskaniem dostępu do zmiennych z funkcji zewnętrznej wewnątrz wewnętrznej funkcji:Ruby uzyskujące dostęp do zmiennych zewnętrznych w funkcji zagnieżdżonej
def foo(x)
def bar
puts x
end
bar
42
end
foo(5)
uzyskać: NameError: undefined local variable or method
x”za główny: Object`
Analogiczny kod Python działa:
def foo(x):
def bar():
print x
bar()
return 42
foo(5)
Jak mam zrobić to samo w Ruby?
Ważnym (ale subtelny) różnica jest taka, że def ... koniec definiuje metody, nie jest funkcją. użyj lambda/proc do zdefiniowania funkcji i przechwytywania zmiennych lokalnych w zamknięciu, jak pokazuje tadman. – rampion