On Thu, May 12, 2011 at 2:40 AM, Brian Xue <brxue.cn / gmail.com> wrote: > Hello, > > I have some puzzles, when I start irb, > > puts self > => main > puts self.class > => Object > > After that, if I write the following method, > > def hello; end > =>nil > > then where is the method "hello" defined? within Object? but > > self.class.instance_methods.include? :hello > =>false Right, because its not defined as an instance method in the Object class, its defined as an instance method in the singleton class of the current object (main). So, in IRB for Ruby 1.8.7 after the above (class <<self; end).instance_methods.include? "hello" => true For some reason, IRB for Ruby 1.9.2 is weird, and I can't find the method anywhere, even though the method works. Even respond_to? ignores it: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] christopher@ubuntu:~$ irb ruby-1.9.2-p180 :001 > def hello ruby-1.9.2-p180 :002?> "hello" ruby-1.9.2-p180 :003?> end => nil ruby-1.9.2-p180 :004 > hello => "hello" ruby-1.9.2-p180 :005 > self.respond_to? :hello => false Its back to working again in head, which shows the cleaner 1.9 syntax: christopher@ubuntu:~$ ruby -v ruby 1.9.3dev (2011-05-02 trunk 31407) [x86_64-linux] christopher@ubuntu:~$ irb ruby-head :001 > def hello ruby-head :002?> "hello" ruby-head :003?> end => nil ruby-head :004 > hello => "hello" ruby-head :005 > self.respond_to? :hello => true ruby-head :006 > self.singleton_class.instance_methods.include? :hello => true