I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...
#!/usr/bin/env ruby
class Binding
def info_locals()
vars = eval("local_variables", self)
vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
end
end
def foo_def
inside_foo_def = "hello there"
binding.info_locals
end
foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]
foo_def()
I get this output...
inside_foo_def --> "hello there"
That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...
inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']
Thanks in advance.
Robert
(Robert)
27 December 2005 21:37
2
You would have to walk up the call stack to get locals of surrounding environments. Kernel.set_trace_func may help here.
Kind regards
robert
···
Dan Smorey Jr. <dsmorey@gmail.com> wrote:
I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...
#!/usr/bin/env ruby
class Binding
def info_locals()
vars = eval("local_variables", self)
vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
end
end
def foo_def
inside_foo_def = "hello there"
binding.info_locals
end
foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]
foo_def()
I get this output...
inside_foo_def --> "hello there"
That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...
inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']
Thanks in advance.
Lou_Vanek
(Lou Vanek)
27 December 2005 23:58
3
this clumsy script gets you part of the way there.
maybe somebody else knows a recursive solution.
#!/usr/bin/env ruby
$top_level = binding
class Binding
def info_vars(b = self)
vars = eval("local_variables", b)
vars.each { |v| puts %(#{v} --> #{eval(v, b).inspect}) }
end
end
def foo_def
inside_foo_def = "hello there"
binding.info_vars
puts "\n# top level:"
binding.info_vars $top_level
end
foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]
foo_def()
Dan Smorey Jr. wrote:
···
I'd like to know how to grab a dump of all variable associated with a
script. Here is a test script I am using...
#!/usr/bin/env ruby
class Binding
def info_locals()
vars = eval("local_variables", self)
vars.each { |v| puts %(#{v} --> #{eval(v, self).inspect}) }
end
end
def foo_def
inside_foo_def = "hello there"
binding.info_locals
end
foo = 'hello'
bar = "goodbye"
array = [ 'one', 'two' ]
foo_def()
I get this output...
inside_foo_def --> "hello there"
That's the problem. I do not get all variables, just the variable in
the def foo_def scope. I'd like to be able to grab foo, bar, and
array also, much like this...
inside_foo_def --> "hello there"
foo --> "hello"
bar --> "bar"
array --> ['one', 'two']
Thanks in advance.