Hello all,

As soon as Joshua Drake is writing an article
about Ruby-specific features I have a suggestion
for an example that shows such features as

a. Ability to easily extend built-in classes 
   (like I do with class Object)
b. Classes are really objects (constants)
   of class Class
c. Reflexion methods like 'class', 'superclass','ancestors',etc
b. Dynamic method call -  object.send('method_string')

This is just a suggestion. The example to show
Ruby specific features can be different, but
I hope you understand what I mean by this example.
Reading and writing to text files is cool, but...
This wouldn't look _much_ different than in , say,
Python.

You will recognize a few lines form the Ruby book.

Here it goes:

#####################################

class Object
   def explore
      print "Object id -\t", self.id, "\n" # 'self' can be ommited here
      print "Object inspected -\t", self.inspect, "\n"
      print "Object class -\t", self.class, "\n"
      puts 'Class hierarchy:'
      print "\t"
      klass=self.class
      klasses=[]
      begin  # Dave & Andy's lines here ;-)
         print klass
         klasses << klass
         klass=klass.superclass
         print ' < ' if klass
      end while klass
      puts
      print "Mixed in modules:\n\t"
      (self.class.ancestors - klasses).each do |m| print m, ' ' end
     puts
   end


   def explore_class
      klass=self.class
      print "=== class #{klass} ===\n"

      ['singleton_methods',           # other similar methods can be
added
      'public_instance_methods',
      'protected_instance_methods',
      'constants'].each do |method_string|
         puts method_string.gsub(/_/,' ')+':'
         n=0
         klass.send(method_string).each do |method|  # This is cooool
!!!
            print "\t", method,"\t"
            n += 1
            if n == 3
               n=0
               print "\n"
            else
               print "\t"
            end
         end
	puts
      end
   end
end   

#########################################

If these lines are placed in some file, say,
explore.rb, once you have

require 'explore.rb'

you can use the 2 above methods with any
object:

a=3.6
a.explore

b='apple'
b.explore_class

Or one can write wonderful example with
ObjectSpace , but I can't think of a practical
example right now.

Just my 2 roubles.

Yuri Leikind