Yanıtlar:
Muhtemelen:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil . çoğu karmaşık nesne için çalışmaz.
var_dumpyakut bir php eşdeğeri ararken bulunan ilk cevap olduğu için pp, bu durumda çok yararlı olduğunu buldum , buraya bakın - stackoverflow.com/questions/6501506/ruby-inspect-readability/…
methodsNesne için bir dizi yöntem döndüren yöntem için bir kullanım bulabilirsiniz . Aynı değil print_r, ama yine de zaman zaman faydalıdır.
>> "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_methodsEşsiz yöntemleri elde etmek için söz konusu bir Nesnenin sınıftan çıkarılması genellikle yararlıdır :(String.instance_methods - Object.instance_methods).sort
.methods.sortçok kullanışlı. Belirli bir nesneye (belirsiz) benzersiz olan yöntemleri hızlı bir şekilde göstermenin 'akıllı' bir yolu var mı? Örneğin, böyle bir yöntem .to_ssık sık görünebilir, bu yüzden bu kadar kullanışlı değildir, ancak bazıları belirli nesneler için belirli yöntemleri bilmek çok kullanışlı olabilir. Özellikle açık olmayan durumlarda. Bunları hızlı bir şekilde almanın bir yolu var mı? (bu durumda, bir PG::Result
to_yamlYöntem kullanışlı bazen gibi görünüyor:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
İadeler
---
:age: 43
:name: Clem
(Bu, bazı YAMLmodüllerin yüklenmesine mi bağlı ? Yoksa normal olarak kullanılabilir mi?)
to_yamlYAML modelinin yüklenmesini gerektirir. Yine de Ruby standart kütüphanesinin bir parçası.
p object
Her nesne için, programın standart çıktısına doğrudan obj.inspect ve ardından bir yeni satır yazar.
Nesnede yalnızca örnek değişkenleri arıyorsanız, bu yararlı olabilir:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
veya kopyalama ve yapıştırma için tek astar olarak:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
Önceden girintili bir JSON yazdırmak istiyorsanız :
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_nameişe yaramadı, ama object.attributesanahtar ve değerlerin güzel bir karma elde etmek için yapar. Bu bana yardımcı oldu, teşekkürler!
inspectSınıfınıza bir yöntem eklemek , varsayılan çıktıya güvenmek yerine sınıfın niteliklerinin nasıl görüntüleneceğini tanımlamanızı sağlar. Birçok sınıf bunu iyi uygulamıyor, ancak hata ayıklama sırasında gerçekten yararlı olabilir. Rubyto_sbir teftiş yöntemi bulamazsa geri döner .