Respostas:
Possivelmente:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil . não funcionará para objetos mais complexos.
var_dumpequivalente php em ruby, descobri que ppé muito útil nesse caso, veja aqui - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
Você pode encontrar um uso para o methodsmétodo que retorna uma matriz de métodos para um objeto. Não é o mesmo que print_r, mas ainda é útil às vezes.
>> "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_methodsclasse 'em questão para obter métodos únicos:(String.instance_methods - Object.instance_methods).sort
.methods.sorté muito útil. Existe alguma maneira 'inteligente' de mostrar rapidamente métodos que são (vagamente) exclusivos para esse objeto em particular? Por exemplo, um método como .to_spode aparecer com frequência, portanto não é tão útil, mas alguns podem ser muito úteis para conhecer certos métodos para determinados objetos. Especialmente nos casos que não são óbvios. Existe alguma maneira de obtê-los rapidamente? (caso em questão, eu tenho um PG::Resultobjeto, e quer avaliar rapidamente os métodos susceptíveis eu poderia achar útil.
O to_yamlmétodo parece útil algumas vezes:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
retorna
---
:age: 43
:name: Clem
(Isso depende de algum YAMLmódulo ser carregado? Ou isso normalmente estaria disponível?)
to_yamlrequer que o modelo YAML seja carregado. No entanto, faz parte da biblioteca padrão do Ruby.
p object
Para cada objeto, escreve diretamente obj.inspect seguido de uma nova linha na saída padrão do programa.
Se você estiver procurando apenas as variáveis de instância no objeto, isso pode ser útil:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
ou como uma linha para copiar e colar:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
coloca foo.to_json
pode ser útil, pois o módulo json é carregado por padrão
to_jsonnão é carregado por padrão no 1.8.7 ou 1.9.2.
Se você deseja imprimir um JSON já recuado :
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ão funcionou, mas object.attributesserve para obter um bom hash de chaves e valores. Isso me ajudou, obrigado!
inspectmétodo à sua classe permite definir como os atributos da classe são exibidos, em vez de confiar na saída padrão. Muitas classes não o implementam bem, mas podem ser realmente úteis durante a depuração. Ruby voltará ato_snão encontrar um método de inspeção.