ruby - que - ¿Cómo vuelco los campos de un objeto a la consola?
que es un objeto en ruby (9)
Cuando ejecuto un script Ruby simple, ¿cuál es la forma más fácil de volcar los campos de un objeto en la consola?
Estoy buscando algo similar a print_r()
PHP que también funcionará con matrices.
El método to_yaml
parece ser útil a veces:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
devoluciones
---
:age: 43
:name: Clem
(¿Esto depende de que se cargue algún módulo YAML
? ¿O eso estaría disponible normalmente?)
Me encontré con este hilo porque estaba buscando algo similar. Me gustan las respuestas y me dieron algunas ideas, así que probé el método .to_hash y también funcionó muy bien en el caso de uso. soo
object.to_hash
Posiblemente:
puts variable.inspect
Puede encontrar un uso para el método de methods
que devuelve una matriz 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"]
Si desea imprimir un JSON ya sangrado :
require ''json''
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
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
podría ser útil ya que el módulo json se carga por defecto
object.attributes_name
=> ["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", "[email protected]", mar, 02 de junio de 2015, 00:16:03 UTC +00: 00, mar, 02 de junio de 2015, 00:22:35 UTC +00: 00, " $ 2a $ 10 $ gUTr3lpHzXvCDhVvizo8Gu / MxiTrazOWmOQqJXMW8gFLvwDftF9Lm "," 2dd1829c9fb3af2a36a970acda0efe5c1d471199 ", true, nil, nil, nil nil nil
p object
Para cada objeto, escribe directamente obj.inspect seguido de una nueva línea en la salida estándar del programa.