Câu trả lời:
Có khả năng:
puts variable.inspect
server = TCPServer.new 0 ; puts server.inspect #<TCPServer:fd 9> => nil
. nó sẽ không hoạt động cho hầu hết các đối tượng phức tạp.
var_dump
tương đương với ruby, tôi thấy rằng đó pp
là rất nhiều usaful trong trường hợp đó, hãy xem tại đây - stackoverflow.com/questions/6501506/ruby-inspect-readability/
Bạn có thể tìm thấy việc sử dụng methods
phương thức trả về một mảng các phương thức cho một đối tượng. Nó không giống như print_r
, nhưng đôi khi vẫn hữu ích.
>> "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
ra khỏi lớp ' thường rất hữu ích để có được các phương thức duy nhất:(String.instance_methods - Object.instance_methods).sort
.methods.sort
rất hữu ích Có cách nào 'thông minh' để nhanh chóng hiển thị các phương thức (mơ hồ) duy nhất cho đối tượng cụ thể đó không? Ví dụ: một phương thức như .to_s
có thể xuất hiện thường xuyên vì vậy nó không hữu ích lắm, nhưng một số phương pháp có thể rất hữu ích khi biết một số phương thức nhất định cho các đối tượng nhất định. Đặc biệt là trong những trường hợp không rõ ràng. Có cách nào để nhanh chóng có được những thứ này? (trong trường hợp, tôi có một PG::Result
đối tượng và muốn nhanh chóng đánh giá các phương pháp có khả năng tôi có thể thấy hữu ích.
Các to_yaml
phương pháp có vẻ là đôi khi hữu ích:
$foo = {:name => "Clem", :age => 43}
puts $foo.to_yaml
trả lại
---
:age: 43
:name: Clem
(Điều này có phụ thuộc vào một số YAML
mô-đun đang được tải không? Hay điều đó thường có sẵn?)
to_yaml
yêu cầu mô hình YAML được tải. Nó là một phần của thư viện tiêu chuẩn Ruby.
p object
Đối với mỗi đối tượng, trực tiếp viết obj.inspect theo sau là một dòng mới đến đầu ra tiêu chuẩn của chương trình.
Nếu bạn đang tìm kiếm chỉ các biến đối tượng trong đối tượng, điều này có thể hữu ích:
obj.instance_variables.map do |var|
puts [var, obj.instance_variable_get(var)].join(":")
end
hoặc như một lớp lót để sao chép và dán:
obj.instance_variables.map{|var| puts [var, obj.instance_variable_get(var)].join(":")}
Nếu bạn muốn in JSON đã được thụt lề :
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
không hoạt động, nhưng object.attributes
để có được một hàm băm và giá trị tốt. Điều này đã giúp tôi ra ngoài, cảm ơn!
inspect
phương thức vào lớp của bạn cho phép bạn xác định cách hiển thị các thuộc tính của lớp, thay vì dựa vào đầu ra mặc định. Rất nhiều lớp không triển khai tốt, nhưng nó có thể thực sự hữu ích khi gỡ lỗi. Ruby sẽ quay trở lạito_s
nếu nó không thể tìm thấy một phương thức kiểm tra.