On Friday, June 13, 2003, at 02:50 AM, you CAN teach an old dog ... wrote: > [snip] >> class To_S; def to_s; "to_s "; end; end > ==> nil >> p To_S.new # how come? > ==> to_s >> puts To_S.new > ==> to_s > > [snip] A class is an object. As such it gets a minimum collection of methods. So when you create the class with class To_S; def to_s; "to_s "; end; end the class To_S has the following class methods, which can be viewed by calling To_S.methods ["superclass", "allocate", "new", "public_class_method", "public_instance_methods", "private_method_defined?", "<=>", "class_eval", "constants", "==", "instance_methods", "===", "public_method_defined?", "module_eval", "private_instance_methods", "included_modules", "to_s", ">=", "<", "<=", "method_defined?", "const_set", "ancestors", "dup", ">", "private_class_method", "protected_instance_methods", "include?", "instance_method", "protected_method_defined?", "class_variables", "const_defined?", "const_get", "name", "clone", "method", "untaint", "kind_of?", "type", "instance_variable_get", "inspect", "display", "frozen?", "taint", "send", "private_methods", "__id__", "=~", "to_a", "eql?", "hash", "singleton_methods", "nil?", "freeze", "is_a?", "class", "instance_variable_set", "methods", "__send__", "instance_eval", "extend", "object_id", "instance_variables", "instance_of?", "copy_object", "id", "protected_methods", "equal?", "respond_to?", "tainted?", "public_methods"] If you call To_S.new.methods you get the following instance methods: ["to_s", "method", "untaint", "kind_of?", "type", "instance_variable_get", "inspect", "display", "frozen?", "taint", "send", "private_methods", "__id__", "=~", "to_a", "eql?", "dup", "hash", "singleton_methods", "nil?", "freeze", "is_a?", "class", "instance_variable_set", "methods", "__send__", "instance_eval", "extend", "object_id", "instance_variables", "instance_of?", "copy_object", "id", "protected_methods", "equal?", "respond_to?", "clone", "tainted?", "==", "public_methods", "==="] Regards, Mark Wilson