Soy nuevo en ruby y estoy jugando con el IRB.¿Cómo se enumeran los objetos actualmente disponibles en el alcance actual en ruby?
me encontré con que hacer una lista de métodos de un objeto utilizando el "método" .methods, y que self.methods especie de darme lo que quiero (similares a dir de Python (órdenes internas)?), Pero ¿cómo puede Me parece que los métodos de una biblioteca/módulo que he cargado a través de incluyen y requieren?
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>
Estoy acostumbrado a pitón, donde utilizo la función dir() para obtener el mismo resultado:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>>
bien, estoy aprendiendo despacio. Esto me lleva a mi siguiente pregunta, ¿cuál es la diferencia entre "incluir" y "requerir"? Iré a leer un poco, pero ¿cómo se pueden ver los métodos que se cargaron a través de "requerir"? – monkut
Una inclusión agregará las constantes, los métodos y las variables de módulo al alcance actual. Normalmente se usa para agregar funcionalidad a una clase. A requieren cargar otro archivo ruby (si aún no se ha cargado). Si desea cargarlo (incluso si ya está cargado) utilice el método de "carga" en su lugar. –
Normalmente, un archivo requerido cargará una clase. Por ejemplo, require 'foo' cargará las clases Foo. Entonces, puedes obtener una lista de métodos en esa clase haciendo Foo.methods (falso). Si el archivo requerido es solo un conjunto de métodos: orig = Object.private_methods; requiere 'foo'; p Object.private_methods - orig –