Richard wrote:
Thanks for pointing me to that kernel method. I’ve got to study the
example(s) and construct a few of my own to apply it well.
Here’s my own example, since I’ve never played with it before:
slim:~/Desktop gavinkistner$ ruby tmp.rb
Hello, Bob
Hello, Gavin
slim:~/Desktop gavinkistner$ ruby -d tmp.rb
Person#initialize called (line 3)
<end Person#initialize>
Person#initialize called (line 3)
<end Person#initialize>
Person#greet_first called (line 9)
–Person#greet called (line 6)
Hello, Bob
–<end Person#greet>
–Person#respond called (line 13)
----Person#greet called (line 6)
Hello, Gavin
----<end Person#greet>
–<end Person#respond>
<end Person#greet_first>
Object#recurse_down called (line 18)
–Object#recurse_down called (line 18)
----Object#recurse_down called (line 18)
------Object#recurse_down called (line 18)
--------Object#recurse_down called (line 18)
----------Object#recurse_down called (line 18)
------------Object#recurse_down called (line 18)
------------<end Object#recurse_down>
----------<end Object#recurse_down>
--------<end Object#recurse_down>
------<end Object#recurse_down>
----<end Object#recurse_down>
–<end Object#recurse_down>
<end Object#recurse_down>
slim:~/Desktop gavinkistner$ cat tmp.rb
class Person
attr_reader :name
def initialize( name )
@name = name
end
def greet( someone )
puts “Hello, #{someone.name}”
end
def greet_first( someone )
greet( someone )
someone.respond( self ) # Social Obligation!
end
def respond( someone )
greet( someone )
end
end
def recurse_down( count=6 )
if count > 0
recurse_down( count-1 )
end
end
if $DEBUG
set_trace_func lambda{ |event, file, line, id, binding, classname|
$indent ||= 0
# Only deal with events that occur inside this file
return unless file == __FILE__
# Only deal with calls to my functions
case event
when 'call'
print $indent==0 ? "\n" : '--'*$indent
puts "#{classname}##{id} called (line #{line})"
$indent += 1
when 'return'
$indent -= 1
print "--" * $indent
puts "<end #{classname}##{id}>"
end
}
end
gk = Person.new( ‘Gavin’ )
bk = Person.new( ‘Bob’ )
gk.greet_first( bk )
recurse_down