what sport rugby results league jugadores information english cuantos ruby introspection irb

ruby - sport - rugby wikipedia english



¿Cómo introspecto las cosas en Ruby? (4)

Claro, es incluso más simple que en Python. Dependiendo de la información que estés buscando, prueba:

obj.methods

y si desea solo los métodos definidos para obj (en lugar de obtener métodos en Object también)

obj.methods - Object.methods

También es interesante hacer cosas como:

obj.methods.grep /to_/

Para obtener variables de instancia, haga esto:

obj.instance_variables

y para variables de clase:

obj.class_variables

Por ejemplo, en Python, puedo hacer cosas como estas si quiero obtener todos los atributos de un objeto:

>>> import sys >>> dir(sys) [''__displayhook__'', ''__doc__'', ''__excepthook__'', ''__name__'', ''__package__'', ''__stderr__'', ''__stdin__'', ''__stdout__'', ''_clear_type_cache'', ''_current_frames'', ''_getframe'', ''api_version'', ''argv'', ''builtin_module_names'', ''byteorder'', ''call_tracing'', ''callstats'', ''copyright'', ''displayhook'', ''dont_write_bytecode'', ''exc_clear'', ''exc_info'', ''exc_type'', ''excepthook'', ''exec_prefix'', ''executable'', ''exit'', ''flags'', ''float_info'', ''getcheckinterval'', ''getdefaultencoding'', ''getdlopenflags'', ''getfilesystemencoding'', ''getprofile'', ''getrecursionlimit'', ''getrefcount'', ''getsizeof'', ''gettrace'', ''hexversion'', ''maxint'', ''maxsize'', ''maxunicode'', ''meta_path'', ''modules'', ''path'', ''path_hooks'', ''path_importer_cache'', ''platform'', ''prefix'', ''ps1'', ''ps2'', ''py3kwarning'', ''pydebug'', ''setcheckinterval'', ''setdlopenflags'', ''setprofile'', ''setrecursionlimit'', ''settrace'', ''stderr'', ''stdin'', ''stdout'', ''subversion'', ''version'', ''version_info'', ''warnoptions'']

O si quiero ver la documentación de algo, puedo usar la función de ayuda:

>>> help(str)

¿Hay alguna manera de hacer cosas similares en Ruby?


Hay un módulo llamado ObjectSpace que se incluye en cada objeto creado en ruby. Contiene todos los métodos que lo ayudan a realizar una introspección del contexto actual del proceso. En irb, comienza en Object:Main contexto Object:Main que es el contexto de nivel superior para la sesión irb actual. Luego, podría hacer algo como time = Time.now y luego irb time que lo llevaría al contexto de ese objeto y podría inspeccionarlo desde adentro sin tener que llamar a los métodos de ObjectSpace en ese objeto.


Si desea todos los métodos a los que puede recurrir en lugar de usar

>>> x.methods

Si desea información de ayuda, llame a ayuda antes de su clase.

>>> help x.class

La ayuda es una envoltura para ri dentro de irb.


Si tienes un objeto y quieres saber a qué métodos responde, puedes ejecutar obj.methods (y todos los trucos que Thenduks ha mencionado en este resultado).

Si tiene una clase, puede ejecutar klass.methods para ver qué métodos de clase están disponibles, o puede ejecutar klass.instance_methods para saber qué métodos están disponibles en las instancias de esa clase. klass.instance_methods(false) es útil, porque le dice qué métodos definió la clase y no se heredaron.

Ahora hay una forma de obtener texto de ayuda para un método dentro de Ruby de la manera en que lo hace python.