introspection/locals_assigned_later_no_parens.rb
tests/_examples/introspection/locals_assigned_later_no_parens.rb in the metorex repository.
# `local_variables` lists every local of a scope, the ones assigned further
# down among them, inside blocks as well, while a block written above an
# assignment still cannot read that local.
def listed
p local_variables
first = 1
[1].each do |item|
[2].each { p local_variables, binding.local_variables }
inner = 2
end
later = proc { p local_variables }
last = 3
later.call
end
listed
def early_read
[1].each do
p missing
rescue NameError => error
p error.class
end
missing = 1
[1].each { p missing }
end
early_read
p local_variables
[1].each { p local_variables }
top = 1
Output:
[:first, :later, :last]
[:item, :inner, :first, :later, :last]
[:item, :inner, :first, :later, :last]
[:first, :later, :last]
NameError
1
[:top]
[:top]