Comment vider les champs d'un objet dans la console?
-
21-08-2019 - |
Question
Lorsque j'exécute un script Ruby simple, quel est le moyen le plus simple de vider les champs d'un objet sur la console?
Je recherche quelque chose de similaire au PHP print_r()
qui fonctionnera également avec les tableaux.
La solution
éventuellement:
puts variable.inspect
Autres conseils
Vous pouvez trouver une utilisation de 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"]
La méthode to_yaml
semble être utile parfois:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
retourne
---
:age: 43
:name: Clem
(Cela dépend-il du chargement de certains YAML
modules? Ou est-ce que ce sera généralement disponible?)
p object
Pour chaque objet, écrit directement obj.inspect suivi par une nouvelle ligne sur la sortie standard du programme!
.
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 en une couche pour le copier / coller:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
met foo.to_json
peut être utile car le module json est chargé par défaut
Si vous souhaitez imprimer un JSON mis en retrait déjà :
require 'json'
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
Je suis tombé sur ce fil parce que je cherchais quelque chose de similaire. J'aime les réponses et ils m'ont donné quelques idées, j'ai donc testé la méthode .to_hash et j'ai très bien fonctionné pour le cas d'utilisation. soo:
object.to_hash
object.attributes_name
= > [& "; id &"; & "nom &"; & "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, & Quot; tom & Quot ;, & Quot; tom@tom.com & Quot ;, mar, 02 juin 2015 00:16:03 UTC +00: 00, mar, 02 Jun 2015 00:22:35 UTC +00: 00 $ 2a $ 10a $ 10a $ 10a $ 10a $ 10a $ 10a , nil, nil, nil, nil]