Risposte:
Possibilmente:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil
. non funzionerà per gli oggetti più complessi.
var_dump
equivalente php in ruby, ho scoperto che pp
in questo caso è molto usaful, guarda qui - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
È possibile trovare un uso per il methods
metodo 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_methods
dalla 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_s
potrebbe 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::Result
oggetto e voglio valutare rapidamente i probabili metodi che potrei trovare utili.
Il to_yaml
metodo sembra essere utile a volte:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
ritorna
---
:age: 43
:name: Clem
(Dipende dal YAML
caricamento di alcuni moduli? O che in genere sarebbe disponibile?)
to_yaml
richiede 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_json
non 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_name
non ha funzionato, ma object.attributes
ha un bel hash di chiavi e valori. Questo mi ha aiutato, grazie!
inspect
metodo 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_s
se non riesce a trovare un metodo di ispezione.