From: Christoph Date: 2005-05-09T07:18:25+09:00 Subject: Re: Query about the top level object Ryan Leavengood schrieb: > It seems to be defined in both: > > p self # => main > p self.class # => Object > def foo > p 'foo' > end > p self.private_methods(false) # => ["initialize", "foo", > "Rational"] > p Object.new.private_methods(false) # => ["initialize", "foo", > "Rational"] > __END__ > > Hmmm, I need to play around with this some more. Defining a (private) method at the "top" scope is equivalent to defining a private method at the scope of the class Object. (The same is true for defining/removing constants by the way ). For this reason I often felt it might be a good idea idea to get rid of the "main" - it serves on on apparent use anyway - and just replace it with Object - that the call at the top scope -- p self # would results in Object instead of the current"main" -- --- def Object.method_added(sym) if private_methods.include?(sym.to_s) puts "private instance method ##{sym.to_s} was added to class #{self}" end super end self.class # => Object def foo p 'foo' end public def bla end class Object def blabla end private def bar end end -- resutls in --- private instance method #foo was added to class Object private instance method #bar was added to class Object /Christoph > > Ryan > >