Antworten:
Möglicherweise:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil . Es funktioniert nicht für die meisten komplexen Objekte.
var_dumpÄquivalent in Ruby gefunden wurde, fand ich, dass ppdies in diesem Fall sehr nützlich ist. Schauen Sie hier - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
Möglicherweise finden Sie eine Verwendung für die methodsMethode, die ein Array von Methoden für ein Objekt zurückgibt. Es ist nicht dasselbe wie print_r, aber manchmal immer noch nützlich.
>> "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_methodsvon der fraglichen Klasse zu subtrahieren , um die einzigartigen Methoden zu erhalten:(String.instance_methods - Object.instance_methods).sort
.methods.sortist sehr nützlich. Gibt es eine "intelligente" Möglichkeit, Methoden, die (vage) für dieses bestimmte Objekt einzigartig sind, schnell anzuzeigen? ZB taucht eine Methode wie diese .to_shäufig auf, so dass sie nicht allzu nützlich ist. In einigen Fällen kann es jedoch sehr praktisch sein, bestimmte Methoden für bestimmte Objekte zu kennen. Besonders in Fällen, die nicht offensichtlich sind. Gibt es eine Möglichkeit, diese schnell zu bekommen? (In diesem Fall habe ich ein PG::ResultObjekt und möchte schnell die wahrscheinlichen Methoden einschätzen, die ich möglicherweise nützlich finden könnte.
Die to_yamlMethode scheint manchmal nützlich zu sein:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
kehrt zurück
---
:age: 43
:name: Clem
(Hängt dies davon ab, YAMLob ein Modul geladen wird? Oder ist das normalerweise verfügbar?)
to_yamldas YAML-Modell muss geladen sein. Es ist jedoch Teil der Ruby-Standardbibliothek.
p object
Schreibt für jedes Objekt direkt obj.inspect, gefolgt von einer neuen Zeile in die Standardausgabe des Programms.
Wenn Sie nur nach den Instanzvariablen im Objekt suchen, kann dies hilfreich sein:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
oder als Einzeiler zum Kopieren und Einfügen:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
setzt foo.to_json
Dies kann nützlich sein, da das JSON-Modul standardmäßig geladen ist
to_jsonwird in 1.8.7 oder 1.9.2 nicht standardmäßig geladen.
Wenn Sie einen bereits eingerückten JSON drucken möchten :
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_namehat nicht funktioniert, object.attributesfunktioniert aber , um einen schönen Hash von Schlüsseln und Werten zu erhalten. Das hat mir geholfen, danke!
inspectMethode zu Ihrer Klasse können Sie definieren, wie die Attribute der Klasse angezeigt werden, anstatt sich auf die Standardausgabe zu verlassen. Viele Klassen implementieren es nicht gut, aber es kann beim Debuggen sehr nützlich sein. Rubyto_sgreift zurück, wenn es keine Inspektionsmethode findet.