Quando estou executando um script Ruby simples, qual é a maneira mais fácil de despejar os campos de um objeto no console?
Estou procurando algo semelhante ao PHP print_r()
que funcione com matrizes também.
ruby
printf-debugging
roryf
fonte
fonte
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.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 quepp
é muito útil nesse caso, veja aqui - stackoverflow.com/questions/6501506/ruby-inspect-readability/…p object
é um apelido paraputs object.inspect
Você pode encontrar um uso para o
methods
método que retorna uma matriz de métodos para um objeto. Não é o mesmo queprint_r
, mas ainda é útil às vezes.fonte
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 umPG::Result
objeto, e quer avaliar rapidamente os métodos susceptíveis eu poderia achar útil.O
to_yaml
método parece útil algumas vezes:retorna
(Isso depende de algum
YAML
módulo ser carregado? Ou isso normalmente estaria disponível?)fonte
to_yaml
requer que o modelo YAML seja carregado. No entanto, faz parte da biblioteca padrão do Ruby.Doc Ruby para
p
.fonte
Se você estiver procurando apenas as variáveis de instância no objeto, isso pode ser útil:
ou como uma linha para copiar e colar:
fonte
coloca foo.to_json
pode ser útil, pois o módulo json é carregado por padrão
fonte
to_json
não é carregado por padrão no 1.8.7 ou 1.9.2.Se você deseja imprimir um JSON já recuado :
fonte
Me deparei com esse tópico porque estava procurando por algo semelhante. Eu gosto das respostas e elas me deram algumas idéias, então testei o método .to_hash e também funcionou muito bem no caso de uso. soo:
object.to_hash
fonte
fonte
undefined method 'attributes' for ...
object.attributes_name
não funcionou, masobject.attributes
serve para obter um bom hash de chaves e valores. Isso me ajudou, obrigado!