# \#methods and #public\_instance\_methods

**URL:** <https://rubytalk.org/t/methods-and-public-instance-methods/23285>\
**Category:** ruby-talk\
**Created:** [14 December 2005 17:24 UTC](https://rubytalk.org/t/methods-and-public-instance-methods/23285 "2005-12-14T17:24:10Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jeff](https://avatars.discourse-cdn.com/v4/letter/j/e19b73/32.png) [@Jeff](https://rubytalk.org/u/Jeff)\
**Post date:** [14 December 2005 17:24 UTC](https://rubytalk.org/t/methods-and-public-instance-methods/23285/1 "2005-12-14T17:24:10Z")

</div>

I'm trying to understand #methods and #public\_instance\_methods as I  
learn about introspection in Ruby.

If I do String.methods in irb, I get a lot fewer listed than if I try  
String.public\_instance\_methods. I would have guessed that  
String.public\_instance\_methods would be a subset of String.methods.

Also, ri String.public\_instance\_methods has no information, and  
public\_instance\_methods is not listed on [ruby-doc.org/core](http://ruby-doc.org/core). I only  
found it by doing a String.methods.

Can anyone shed some light here?

Thanks  
Jeff

> **···**
>
> --  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

---

<div class="post-metadata">

**Author:** ![Its\_Me](https://avatars.discourse-cdn.com/v4/letter/i/958977/32.png) [@Its\_Me](https://rubytalk.org/u/Its_Me)\
**Post date:** [14 December 2005 17:57 UTC](https://rubytalk.org/t/methods-and-public-instance-methods/23285/2 "2005-12-14T17:57:39Z")

</div>

String.instance\_methods == "abc".methods

String.instance\_methods gives methods on instances of String.

String.methods gives methods on String itself.

Hth.

"Jeff Cohen" \<cohen.jeff@gmail.com\> wrote in message  
news:bcd0453943d7bed44939379f19791061@ruby-forum.com...

> **···**
>
> > I'm trying to understand #methods and #public\_instance\_methods as I  
> > learn about introspection in Ruby.
> > 
> > If I do String.methods in irb, I get a lot fewer listed than if I try  
> > String.public\_instance\_methods. I would have guessed that  
> > String.public\_instance\_methods would be a subset of String.methods.
> > 
> > Also, ri String.public\_instance\_methods has no information, and  
> > public\_instance\_methods is not listed on ruby-doc.org/core. I only  
> > found it by doing a String.methods.
> > 
> > Can anyone shed some light here?
> > 
> > Thanks  
> > Jeff
> > 
> > --  
> > Posted via [http://www.ruby-forum.com/\](http://www.ruby-forum.com/%5C).

---

<div class="post-metadata">

**Author:** ![Esteban\_Manchado\_Ve1](https://avatars.discourse-cdn.com/v4/letter/e/c57346/32.png) [@Esteban\_Manchado\_Ve1](https://rubytalk.org/u/Esteban_Manchado_Ve1)\
**Post date:** [14 December 2005 18:01 UTC](https://rubytalk.org/t/methods-and-public-instance-methods/23285/3 "2005-12-14T18:01:00Z")

</div>

Hi Jeff,

> I'm trying to understand #methods and #public\_instance\_methods as I  
> learn about introspection in Ruby.
> 
> If I do String.methods in irb, I get a lot fewer listed than if I try  
> String.public\_instance\_methods. I would have guessed that  
> String.public\_instance\_methods would be a subset of String.methods.
> 
> Also, ri String.public\_instance\_methods has no information, and  
> public\_instance\_methods is not listed on ruby-doc.org/core. I only  
> found it by doing a String.methods.
> 
> Can anyone shed some light here?

&nbsp;&nbsp;&nbsp;&nbsp;#methods returns the list of methods callable for that \_object\_. That is,  
if you call String.methods, you get the methods for the String object (the  
object of class Class, if you prefer 😛 ).

&nbsp;&nbsp;&nbsp;&nbsp;#public\_instance\_methods, on the other hand, is a method defined for Class  
objects (perhaps some other, but anyway). It returns the methods callable for  
the \_objects of that class\_.

&nbsp;&nbsp;&nbsp;&nbsp;E.g.: if String.methods return ['a', 'b', 'c'] and  
String.public\_instance\_methods return ['d', 'e', 'f'], you can call String.a,  
String.b, String.c, "foo".d, "bar".e, "qux".f.

&nbsp;&nbsp;&nbsp;&nbsp;You can also call String.public\_instance\_methods(false) if you only want  
the methods defined in the class String, but not inherited from  
String.superclass.

&nbsp;&nbsp;&nbsp;&nbsp;HTH,

> **···**
>
> On Thu, Dec 15, 2005 at 02:24:10AM +0900, Jeff Cohen wrote:
> 
> --  
> Esteban Manchado Velázquez \<zoso@foton.es\> - [http://www.foton.es](http://www.foton.es)  
> EuropeSwPatentFree - [http://EuropeSwPatentFree.hispalinux.es](http://EuropeSwPatentFree.hispalinux.es)

---

<div class="post-metadata">

**Author:** ![Jeff](https://avatars.discourse-cdn.com/v4/letter/j/e19b73/32.png) [@Jeff](https://rubytalk.org/u/Jeff)\
**Post date:** [14 December 2005 18:52 UTC](https://rubytalk.org/t/methods-and-public-instance-methods/23285/4 "2005-12-14T18:52:58Z")

</div>

Got it.

Thanks everyone, that helps a lot.

Jeff

> **···**
>
> --  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
