# \#methods and #public\_instance\_methods

**URL:** <https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266>\
**Category:** Ruby\
**Created:** [December 14, 2005, 6:24pm UTC](https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266 "2005-12-14T18:24:03Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [December 14, 2005, 6:24pm UTC](https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266/1 "2005-12-14T18:24:03Z")

</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 [RDoc Documentation](http://ruby-doc.org/core). I only  
found it by doing a String.methods.

Can anyone shed some light here?

Thanks  
Jeff

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [December 14, 2005, 7:25pm UTC](https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266/2 "2005-12-14T19:25:14Z")

</div>

String.instance\_methods == “abc”.methods

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

String.methods gives methods on String itself.

Hth.

“Jeff C.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote in message  
news:removed\_email\_address@domain.invalid…

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [December 14, 2005, 7:43pm UTC](https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266/3 "2005-12-14T19:43:18Z")

</div>

Hi Jeff,

On Thu, Dec 15, 2005 at 02:24:10AM +0900, Jeff C. wrote:

> Can anyone shed some light here?

```
#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 😛 ).

```
#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_.

```
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.

```
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.

```
HTH,
```

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [December 14, 2005, 7:52pm UTC](https://www.ruby-forum.com/t/methods-and-public-instance-methods/50266/4 "2005-12-14T19:52:51Z")

</div>

Got it.

Thanks everyone, that helps a lot.

Jeff
