Je suis nouveau à Ruby et je joue avec l'IRB.Comment lister les objets actuellement disponibles dans la portée actuelle dans ruby?
Je trouve que je peux énumérer les méthodes d'un objet en utilisant la méthode « .methods », et que self.methods sorte de me donner ce que je veux (semblable à dir Python (builtins)?), Mais comment Je trouve les méthodes d'une bibliothèque/module que j'ai chargé via include et require?
irb(main):036:0* self.methods
=> ["irb_pop_binding", "inspect", "taguri", "irb_chws", "clone", "irb_pushws", "public_methods", "taguri=", "irb_pwws",
"public", "display", "irb_require", "irb_exit", "instance_variable_defined?", "irb_cb", "equal?", "freeze", "irb_context
", "irb_pop_workspace", "irb_cwb", "irb_jobs", "irb_bindings", "methods", "irb_current_working_workspace", "respond_to?"
, "irb_popb", "irb_cws", "fg", "pushws", "conf", "dup", "cwws", "instance_variables", "source", "cb", "kill", "help", "_
_id__", "method", "eql?", "irb_pwb", "id", "bindings", "send", "singleton_methods", "popb", "irb_kill", "chws", "taint",
"irb_push_binding", "instance_variable_get", "frozen?", "irb_source", "pwws", "private", "instance_of?", "__send__", "i
rb_workspaces", "to_a", "irb_quit", "to_yaml_style", "irb_popws", "irb_change_workspace", "jobs", "type", "install_alias
_method", "irb_push_workspace", "require_gem", "object_id", "instance_eval", "protected_methods", "irb_print_working_wor
kspace", "irb_load", "require", "==", "cws", "===", "irb_pushb", "instance_variable_set", "irb_current_working_binding",
"extend", "kind_of?", "context", "gem", "to_yaml_properties", "quit", "popws", "irb", "to_s", "to_yaml", "irb_fg", "cla
ss", "hash", "private_methods", "=~", "tainted?", "include", "irb_cwws", "irb_change_binding", "irb_help", "untaint", "n
il?", "pushb", "exit", "irb_print_working_binding", "is_a?", "workspaces"]
irb(main):037:0>
Je suis habitué à python, où j'utilise la fonction dir() pour accomplir la même chose:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>>
ok, j'apprends lentement. Cela amène à ma prochaine question, quelle est la différence entre "inclure" et "exiger"? Je vais faire un peu de lecture, mais comment voir les méthodes qui ont été chargées via "require"? – monkut
Un include ajoutera les constantes, les méthodes et les variables de module à la portée actuelle. Il est généralement utilisé pour ajouter des fonctionnalités à une classe. Un require charge un autre fichier ruby (s'il n'a pas déjà été chargé). Si vous voulez le charger (même s'il est déjà chargé), utilisez plutôt la méthode "load". –
Généralement, un fichier requis chargera une classe. Par exemple, require 'foo' chargera les classes Foo. Ainsi, vous pouvez obtenir une liste de méthodes dans cette classe en faisant Foo.methods (false). Si le fichier requis est juste un tas de méthodes: orig = Object.private_methods; exiger 'foo'; p Object.private_methods - orig –