¿Cómo puedo volcar campos de un objeto a la consola?
-
21-08-2019 - |
Pregunta
Cuando estoy corriendo un simple script Ruby, ¿cuál es la forma más fácil de deshacerse de los campos de un objeto a la consola?
Estoy buscando algo similar a print_r()
de PHP que va a trabajar con matrices también.
Solución
Posiblemente:
puts variable.inspect
Otros consejos
Es posible encontrar un uso para el método methods
que devuelve un conjunto de métodos para un objeto. No es lo mismo que 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"]
El método to_yaml
parece ser útil a veces:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
retornos
---
:age: 43
:name: Clem
(¿Depende de algún módulo YAML
ser cargado? ¿O habría que suelen estar disponibles?)
p object
Para cada objeto, escribe directamente obj.inspect seguido de una nueva línea en la salida estándar del programa.
Si usted está buscando sólo 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 la copia 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 de JSON se carga por defecto
Si desea imprimir un ya sangría JSON
require 'json'
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
Me encontré con este hilo, porque yo estaba buscando algo similar. Me gustan las respuestas y me dieron algunas ideas así que probé el método .to_hash y funcionó muy bien para el caso de uso también. Soo:
object.to_hash
object.attributes_name
=> [ "id", "nombre", "e-mail", "created_at", "updated_at", "password_digest", "remember_token", "admin", "marketing_permissions", "TERMS_AND_CONDITIONS", "desactivar", "black_list", "zero_cost", "password_reset_token", "password_reset_sent_at"]
object.attributes.values
=> [1, "Tom", "tom@tom.com", mar, 02 de Jun el año 2015 00:16:03 GMT +00: 00, mar, 02 de Jun el año 2015 00:22:35 GMT +00: 00, "$ 2a $ 10 $ gUTr3lpHzXvCDhVvizo8Gu / MxiTrazOWmOQqJXMW8gFLvwDftF9Lm", "2dd1829c9fb3af2a36a970acda0efe5c1d471199", cierto, nada, cero, cero, cero, cero, cero, cero]