Risposte:
Possibilmente:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil . non funzionerà per gli oggetti più complessi.
var_dumpequivalente php in ruby, ho scoperto che ppin questo caso è molto usaful, guarda qui - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
È possibile trovare un uso per il methodsmetodo che restituisce una matrice di metodi per un oggetto. Non è lo stesso di print_r, ma a volte è ancora utile.
>> "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_methodsdalla classe "in questione per ottenere metodi unici:(String.instance_methods - Object.instance_methods).sort
.methods.sortè molto utile Esiste un modo "intelligente" per mostrare rapidamente metodi che sono (vagamente) unici per quel particolare oggetto? Ad esempio un metodo come .to_spotrebbe apparire spesso, quindi non è poi così utile, ma alcuni potrebbe essere molto utile conoscere determinati metodi per determinati oggetti. Soprattutto nei casi che non sono ovvi. C'è un modo per ottenerli rapidamente? (caso specifico, ho un PG::Resultoggetto e voglio valutare rapidamente i probabili metodi che potrei trovare utili.
Il to_yamlmetodo sembra essere utile a volte:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
ritorna
---
:age: 43
:name: Clem
(Dipende dal YAMLcaricamento di alcuni moduli? O che in genere sarebbe disponibile?)
to_yamlrichiede il caricamento del modello YAML. Fa parte della libreria standard di Ruby, però.
p object
Per ogni oggetto, scrive direttamente obj.inspect seguito da una nuova riga nell'output standard del programma.
Se stai cercando solo le variabili di istanza nell'oggetto, questo potrebbe essere utile:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
o come una copertina per copia e incolla:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
mette foo.to_json
potrebbe tornare utile poiché il modulo json è caricato per impostazione predefinita
to_jsonnon viene caricato per impostazione predefinita in 1.8.7 o 1.9.2.
Se si desidera stampare un JSON già rientrato :
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_namenon ha funzionato, ma object.attributesha un bel hash di chiavi e valori. Questo mi ha aiutato, grazie!
inspectmetodo alla classe consente di definire la modalità di visualizzazione degli attributi della classe, anziché fare affidamento sull'output predefinito. Molte classi non lo implementano bene, ma può essere davvero utile durante il debug. Ruby tornerà indietroto_sse non riesce a trovare un metodo di ispezione.