Question

Par exemple, en Python, je peux faire des choses comme ça si je veux obtenir tous les attributs d'un objet:

>>> 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']

Ou si je veux voir la documentation de quelque chose, je peux utiliser la fonction d'aide:

>>> help(str)

Est-il possible de faire des choses semblables à Ruby?

Était-ce utile?

La solution

Bien sûr, il est encore plus simple que dans Python. Selon les informations que vous cherchez, essayez:

obj.methods

et si vous voulez seulement les méthodes définies pour obj (par opposition à la méthodes sur Object ainsi)

obj.methods - Object.methods

Il est également intéressant de faire des choses comme:

obj.methods.grep /to_/

Pour les variables d'instance, faites ceci:

obj.instance_variables

et pour les variables de classe:

obj.class_variables

Autres conseils

Si vous voulez que toutes les méthodes que vous pouvez faire appel à quelque chose que l'utilisation

>>> x.methods

Si vous voulez des informations d'aide appelez alors l'aide avant sa classe

>>> help x.class

L'aide est un wrapper pour ri dans les RIR.

Si vous avez un objet, et vous voulez savoir quelles méthodes il répond, vous pouvez exécuter obj.methods (et toutes les astuces qui thenduks a mentionné ce résultat.)

Si vous avez une classe, vous pouvez exécuter klass.methods pour voir quelles méthodes de classe sont availabe, ou vous pouvez exécuter klass.instance_methods savoir quelles méthodes sont disponibles sur les instances de cette classe. klass.instance_methods(false) est utile, car du coup il vous dit quelles étaient les méthodes définies par la classe et non héréditaire.

Il y a maintenant moyen d'obtenir un texte d'aide pour une méthode dans Ruby le python ainsi fait.

Il y a un module appelé ObjectSpace qui est inclus dans chaque objet créé en rubis. Il contient toutes les méthodes qui vous aident à introspecter contexte actuel du processus. Dans irb vous commencez dans un contexte de Object:Main qui est le contexte de haut niveau pour la session en cours RIR. Ensuite, vous pouvez faire quelque chose comme time = Time.now et ne irb time qui vous emmènera dans le contexte de cet objet et vous pouvez l'inspecter de l'intérieur sans faire appel à des méthodes de ObjectSpace sur cet objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top