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.