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 pp
dies 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 methods
Methode, 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_methods
von der fraglichen Klasse zu subtrahieren , um die einzigartigen Methoden zu erhalten:(String.instance_methods - Object.instance_methods).sort
.methods.sort
ist 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_s
hä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::Result
Objekt und möchte schnell die wahrscheinlichen Methoden einschätzen, die ich möglicherweise nützlich finden könnte.
Die to_yaml
Methode 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, YAML
ob ein Modul geladen wird? Oder ist das normalerweise verfügbar?)
to_yaml
das 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_json
wird 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_name
hat nicht funktioniert, object.attributes
funktioniert aber , um einen schönen Hash von Schlüsseln und Werten zu erhalten. Das hat mir geholfen, danke!
inspect
Methode 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_s
greift zurück, wenn es keine Inspektionsmethode findet.