Odpowiedzi:
Możliwie:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil
. nie będzie działać w przypadku najbardziej złożonych obiektów.
var_dump
ekwiwalentu php w rubinie, okazało się, że pp
jest to bardzo przydatne w tym przypadku, spójrz tutaj - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
Możesz znaleźć zastosowanie dla methods
metody, która zwraca tablicę metod dla obiektu. To nie to samo print_r
, ale czasem przydatne.
>> "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
od danej klasy, aby uzyskać unikalne metody:(String.instance_methods - Object.instance_methods).sort
.methods.sort
jest bardzo przydatne. Czy istnieje jakiś „inteligentny” sposób szybkiego pokazania metod, które są (niejasno) unikalne dla tego konkretnego obiektu? Na przykład metoda taka .to_s
może się często pojawiać, więc nie jest aż tak przydatna, ale niektóre z nich mogą być bardzo przydatne w przypadku niektórych metod dla niektórych obiektów. Zwłaszcza w przypadkach, które nie są oczywiste. Czy jest jakiś sposób, aby szybko je zdobyć? (w tym przypadku mam PG::Result
obiekt i chcę szybko ocenić prawdopodobne metody, które mogłyby okazać się przydatne.
to_yaml
Metoda wydaje się być czasami użyteczne:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
zwroty
---
:age: 43
:name: Clem
(Czy zależy to od YAML
załadowania jakiegoś modułu? Czy to zazwyczaj będzie dostępne?)
to_yaml
wymaga załadowania modelu YAML. Jest to jednak część standardowej biblioteki Ruby.
p object
Dla każdego obiektu zapisuje bezpośrednio obj.inspect, a następnie nowy wiersz na standardowe wyjście programu.
Jeśli szukasz tylko zmiennych instancji w obiekcie, może to być przydatne:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
lub jako jednolinijka do kopiowania i wklejania:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
Jeśli chcesz wydrukować już wcięty JSON :
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
nie działało, ale object.attributes
robi, aby uzyskać niezły skrót kluczy i wartości. To mi pomogło, dzięki!
inspect
metody do klasy pozwala określić sposób wyświetlania atrybutów klasy, zamiast polegać na domyślnych wynikach. Wiele klas nie implementuje go dobrze, ale może być bardzo przydatne podczas debugowania. Ruby cofnie się,to_s
jeśli nie będzie w stanie znaleźć metody inspekcji.