Réponses:
Peut-être:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil . cela ne fonctionnera pas pour la plupart des objets complexes.
var_dumpéquivalent php en rubis, j'ai trouvé que cela ppétait très utile dans ce cas, regardez ici - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
Vous pourriez trouver une utilisation pour la methodsméthode qui renvoie un tableau de méthodes pour un objet. Ce n'est pas la même chose print_r, mais c'est toujours 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"]
instance_methodsde la classe en question pour obtenir les méthodes qui sont uniques:(String.instance_methods - Object.instance_methods).sort
.methods.sortest très utile. Existe-t-il un moyen «intelligent» de montrer rapidement des méthodes qui sont (vaguement) uniques à cet objet particulier? Par exemple, une méthode comme celle-ci .to_speut apparaître souvent, ce n'est donc pas très utile, mais certaines peuvent être très utiles pour connaître certaines méthodes pour certains objets. Surtout dans les cas qui ne sont pas évidents. Existe-t-il un moyen de les obtenir rapidement? (cas d'espèce, j'ai un PG::Resultobjet, et je veux évaluer rapidement les méthodes probables que je pourrais éventuellement trouver utiles.
La to_yamlméthode semble parfois utile:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
Retour
---
:age: 43
:name: Clem
(Est-ce que cela dépend du YAMLchargement d' un module? Ou est-ce généralement disponible?)
to_yamlnécessite le chargement du modèle YAML. Il fait cependant partie de la bibliothèque standard de Ruby.
p object
Pour chaque objet, écrit directement obj.inspect suivi d'un retour à 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 ligne pour copier et coller:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
met foo.to_json
pourrait être utile car le module json est chargé par défaut
to_jsonn'est pas chargé par défaut en 1.8.7 ou 1.9.2.
Si vous souhaitez imprimer un JSON déjà en retrait :
require 'json'
...
puts JSON.pretty_generate(JSON.parse(object.to_json))
object.attribute_names
# => ["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", "tom@tom.com", Tue, 02 Jun 2015 00:16:03 UTC +00:00, Tue, 02 Jun 2015 00:22:35 UTC +00:00, "$2a$10$gUTr3lpHzXvCDhVvizo8Gu/MxiTrazOWmOQqJXMW8gFLvwDftF9Lm", "2dd1829c9fb3af2a36a970acda0efe5c1d471199", true, nil, nil, nil, nil, nil, nil, nil]
undefined method 'attributes' for ...
object.attributes_namen'a pas fonctionné, mais object.attributespermet d'obtenir un bon hachage des clés et des valeurs. Cela m'a aidé, merci!
inspectméthode à votre classe vous permet de définir la façon dont les attributs de la classe sont affichés, plutôt que de s'appuyer sur la sortie par défaut. Beaucoup de classes ne l'implémentent pas bien, mais cela peut être très utile lors du débogage. Ruby reviendrato_ss'il ne trouve pas de méthode d'inspection.