Respuestas:
Posiblemente:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil
. no funcionará para la mayoría de los objetos complejos.
var_dump
equivalente de php en ruby, encontré que pp
es muy útil en ese caso, mira aquí - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
Puede encontrar un uso para el methods
método que devuelve una matriz de métodos para un objeto. No es lo mismo print_r
, pero sigue siendo útil a veces.
>> "Hello".methods.sort
=> ["%", "*", "+", "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", "[]", "[]=", "__id__", "__send__", "all?", "any?", "between?", "capitalize", "capitalize!", "casecmp", "center", "chomp", "chomp!", "chop", "chop!", "class", "clone", "collect", "concat", "count", "crypt", "delete", "delete!", "detect", "display", "downcase", "downcase!", "dump", "dup", "each", "each_byte", "each_line", "each_with_index", "empty?", "entries", "eql?", "equal?", "extend", "find", "find_all", "freeze", "frozen?", "grep", "gsub", "gsub!", "hash", "hex", "id", "include?", "index", "inject", "insert", "inspect", "instance_eval", "instance_of?", "instance_variable_defined?", "instance_variable_get", "instance_variable_set", "instance_variables", "intern", "is_a?", "is_binary_data?", "is_complex_yaml?", "kind_of?", "length", "ljust", "lstrip", "lstrip!", "map", "match", "max", "member?", "method", "methods", "min", "next", "next!", "nil?", "object_id", "oct", "partition", "private_methods", "protected_methods", "public_methods", "reject", "replace", "respond_to?", "reverse", "reverse!", "rindex", "rjust", "rstrip", "rstrip!", "scan", "select", "send", "singleton_methods", "size", "slice", "slice!", "sort", "sort_by", "split", "squeeze", "squeeze!", "strip", "strip!", "sub", "sub!", "succ", "succ!", "sum", "swapcase", "swapcase!", "taguri", "taguri=", "taint", "tainted?", "to_a", "to_f", "to_i", "to_s", "to_str", "to_sym", "to_yaml", "to_yaml_properties", "to_yaml_style", "tr", "tr!", "tr_s", "tr_s!", "type", "unpack", "untaint", "upcase", "upcase!", "upto", "zip"]
instance_methods
de la clase 'en cuestión para obtener los métodos que son únicos:(String.instance_methods - Object.instance_methods).sort
.methods.sort
es muy útil. ¿Hay alguna forma 'inteligente' de mostrar rápidamente métodos que sean (vagamente) únicos para ese objeto en particular? Por ejemplo, un método como .to_s
puede aparecer a menudo, por lo que no es tan útil, pero algunos podrían ser muy útiles para conocer ciertos métodos para ciertos objetos. Especialmente en casos que no son obvios. ¿Hay alguna forma de obtenerlos rápidamente? (en este caso, tengo un PG::Result
objeto y quiero evaluar rápidamente los métodos probables que podría encontrar útiles.
El to_yaml
método parece ser útil a veces:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
devoluciones
---
:age: 43
:name: Clem
(¿Depende de que YAML
se esté cargando algún módulo? ¿O estaría normalmente disponible?)
to_yaml
requiere que se cargue el modelo YAML. Sin embargo, es parte de la biblioteca estándar de Ruby.
p object
Para cada objeto, escribe directamente obj.inspect seguido de una nueva línea en la salida estándar del programa.
Si está buscando solo las variables de instancia en el objeto, esto podría ser útil:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
o como una sola línea para copiar y pegar:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
pone foo.to_json
puede ser útil ya que el módulo json se carga por defecto
to_json
no se carga por defecto en 1.8.7 o 1.9.2.
Si desea imprimir un JSON ya sangrado :
require 'json'
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
object.attribute_names
# => ["id", "name", "email", "created_at", "updated_at", "password_digest", "remember_token", "admin", "marketing_permissions", "terms_and_conditions", "disable", "black_list", "zero_cost", "password_reset_token", "password_reset_sent_at"]
object.attributes.values
# => [1, "tom", "tom@tom.com", Tue, 02 Jun 2015 00:16:03 UTC +00:00, Tue, 02 Jun 2015 00:22:35 UTC +00:00, "$2a$10$gUTr3lpHzXvCDhVvizo8Gu/MxiTrazOWmOQqJXMW8gFLvwDftF9Lm", "2dd1829c9fb3af2a36a970acda0efe5c1d471199", true, nil, nil, nil, nil, nil, nil, nil]
undefined method 'attributes' for ...
object.attributes_name
no funcionó, pero lo object.attributes
hace para obtener un buen hash de claves y valores. Esto me ayudó, gracias!
inspect
método a su clase le permite definir cómo se muestran los atributos de la clase, en lugar de confiar en la salida predeterminada. Muchas clases no lo implementan bien, pero puede ser realmente útil al depurar. Ruby recurrirá ato_s
si no puede encontrar un método de inspección.