web-dev-qa-db-fra.com

Comment vider les champs d'un objet dans la console?

Lorsque j'exécute un simple script Ruby, quel est le moyen le plus simple de vider les champs d'un objet sur la console?

Je recherche quelque chose de similaire au print_r() de PHP qui fonctionne également avec les tableaux.

246
roryf

Peut-être:

puts variable.inspect
392
Christian Lescuyer

Vous pouvez trouver une utilisation pour la méthode methods qui renvoie un tableau de méthodes pour un objet. Ce n'est pas la même chose que print_r, mais reste utile parfois.

>> "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"]
52
dylanfm

La méthode to_yaml semble être utile parfois:

$foo = {:name => "Clem", :age => 43}

puts $foo.to_yaml

résultats

--- 
:age: 43
:name: Clem

(Est-ce que cela dépend du chargement du module YAML? Ou est-ce que cela est généralement disponible?)

47
mjs
p object

doc Ruby pour p.

p(*args) public

Pour chaque objet, écrit directement obj.inspect suivi d’une nouvelle ligne dans la sortie standard du programme.

29
rampion

Si vous recherchez uniquement les variables d'instance dans l'objet, cela peut être utile:

obj.instance_variables.map do |var|
  puts [var, obj.instance_variable_get(var)].join(":")
end

ou comme une ligne pour copier et coller:

obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
14
Mike

met foo.to_json

pourrait être utile puisque le module json est chargé par défaut

10
tjerk

Si vous souhaitez imprimer un déjà JSON en retrait:

require 'json'
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
5
ROMANIA_engineer

Je suis tombé sur ce fil parce que je cherchais quelque chose de similaire. J'aime les réponses et elles m'ont donné quelques idées. J'ai donc testé la méthode .to_hash et j'ai très bien travaillé pour le cas d'utilisation. soo:

object.to_hash

4
Gregor