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.

¿Fue útil?

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

Rubí doc para p.

  

p(*args) public

     

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]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top