Respostas:
Possivelmente:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil
. não funcionará para objetos mais complexos.
var_dump
equivalente 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 methods
mé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_methods
classe '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_s
pode 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::Result
objeto, e quer avaliar rapidamente os métodos susceptíveis eu poderia achar útil.
O to_yaml
método parece útil algumas vezes:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
retorna
---
:age: 43
:name: Clem
(Isso depende de algum YAML
módulo ser carregado? Ou isso normalmente estaria disponível?)
to_yaml
requer 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_json
nã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_name
não funcionou, mas object.attributes
serve para obter um bom hash de chaves e valores. Isso me ajudou, obrigado!
inspect
mé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_s
não encontrar um método de inspeção.