How do I introspect things in Ruby?

前端 未结 4 885
粉色の甜心
粉色の甜心 2021-01-31 18:57

For instance, in Python, I can do things like this if I want to get all attributes on an object:

>>> import sys
>>> dir(sys)
[\'__displayhook__         


        
相关标签:
4条回答
  • 2021-01-31 18:59

    There's a module called ObjectSpace which is included into each object created in ruby. It holds all of the methods that help you introspect current context of the process. In irb you begin in Object:Main context which is top level context for current irb session. Then you could do something like time = Time.now and then do irb time which would take you into that object's context and you could inspect it from the inside without calling ObjectSpace methods on that object.

    0 讨论(0)
  • 2021-01-31 19:02

    If you want all the methods that you can call on something than use

    >>> x.methods
    

    If you want some help information then call help before its class

    >>> help x.class
    

    Help is a wrapper for ri within irb.

    0 讨论(0)
  • 2021-01-31 19:10

    Sure, it's even simpler than in Python. Depending on what information you're looking for, try:

    obj.methods
    

    and if you want just the methods defined for obj (as opposed to getting methods on Object as well)

    obj.methods - Object.methods
    

    Also interesting is doing stuff like:

    obj.methods.grep /to_/
    

    To get instance variables, do this:

    obj.instance_variables
    

    and for class variables:

    obj.class_variables
    
    0 讨论(0)
  • 2021-01-31 19:20

    If you have an object, and you want to know what methods it responds to, you can run obj.methods (and all of the tricks that thenduks has mentioned on this result.)

    If you have a class, you can run klass.methods to see what class methods are availabe, or you can run klass.instance_methods to know what methods are available on instances of that class. klass.instance_methods(false) is useful, becuase it tells you what methods were defined by the class and not inherited.

    There's now way to get help text for a method within Ruby the way python does.

    0 讨论(0)
提交回复
热议问题