Forum: Ruby #methods and #public_instance_methods

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jeff C. (Guest)
on 2005-12-14 19:24
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
itsme213 (Guest)
on 2005-12-14 20:25
(Received via mailing list)
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> wrote in message
news:removed_email_address@domain.invalid...
Esteban Manchado =?iso-8859-1?Q?Vel=E1zquez?= (Guest)
on 2005-12-14 20:43
(Received via mailing list)
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 :-P ).

    #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,
Jeff C. (Guest)
on 2005-12-14 20:52
Got it.

Thanks everyone, that helps a lot.

Jeff
This topic is locked and can not be replied to.