introspection/local_variables_shadowing_builtins_no_parens.rb
tests/_examples/introspection/local_variables_shadowing_builtins_no_parens.rb in the metorex repository.
# A local named after a builtin method is a local like any other: it is
# reserved from the top of the body it is assigned in, and `local_variables`
# names it.
def shadows_p
before = local_variables
p = 5
[before, local_variables, p]
end
puts shadows_p.inspect
def shadows_format
format = "written"
binding.local_variables
end
puts shadows_format.inspect
# The name a block closes over is reported by the binding taken inside it.
def closed_over_builtin_name
print = "held"
proc { |only| binding.local_variables }.call 1
end
puts closed_over_builtin_name.inspect
Output:
[[:before, :p], [:before, :p], 5]
[:format]
[:only, :print]