Sự khác nhau giữa các phương thức lớp và kiểu trong Ruby là gì? Tôi đã nhận thấy rằng loại công trình để tìm loại của một số lớp học nhưng không phải những người khác.class() so với type() trong Ruby
Trả lời
Điểm khác biệt chính là Object#type
không được dùng nữa. Từ loại RDoc cho đối tượng #:
Từ đồng nghĩa không được chấp nhận cho lớp # đối tượng.
Dưới đây là lý do tại sao bạn nên sử dụng Object#class
:
Trả về lớp của obj, bây giờ ưa thích hơn Object # loại, as type một đối tượng trong Ruby là chỉ lỏng lẻo gắn với đối tượng đó của lớp. Phương thức này phải luôn được gọi với một bộ thu rõ ràng vì lớp học cũng là một từ dành riêng trong Ruby là .
Thực tế, bạn có thể muốn sử dụng Object#respond_to?
thay vì kiểm tra lớp của đối tượng trong hầu hết các trường hợp.
#type
là một từ đồng nghĩa với #class
, nhưng nó không được dùng nữa trong ruby 1.8 và dường như đã biến mất từ ruby 1.9. Chỉ cần sử dụng #class
ở mọi nơi.
# For ruby 1.8 $ ri Object#type ------------------------------------------------------------ Object#type obj.type => class ------------------------------------------------------------------------ Deprecated synonym for Object#class. # For ruby 1.9 $ ri1.9 Object#type Nothing known about Object#type
Nếu đó là từ đồng nghĩa, tại sao tôi lại gặp lỗi phương thức không xác định khi tôi gọi loại trên lớp tôi đã tự xác định? Nhưng điều tương tự cũng không xảy ra khi tôi gọi phương thức lớp cho cùng một lớp. lỗi phương thức không xác định không giống như những gì bạn sẽ nhận được cho một phương pháp không dùng nữa. –
Bạn đang sử dụng ruby 1.9? Trên ruby 1.8 Tôi không nhận được một lỗi, chỉ là một cảnh báo về việc không dùng nữa. – kch
Và nếu bạn đang ở trên ruby 1.9, tốt, không dùng nữa có nghĩa là nó sẽ bị xóa một số khi nào, và trông giống như 1,9 là khi nào. – kch
- 1. Mẫu Singleton so với Monostate trong Ruby
- 2. GWT.create (Class <?>) so với GIN?
- 3. Khi nào nên sử dụng Ruby DelegateClass thay vì SimpleDelegator? (DelegateClass method so với SimpleDelegator class)
- 4. C++: Danh sách Constructor so với initializer trong struct/class
- 5. Khi nào sử dụng class so với dict trong python?
- 6. Tại sao Object.class == Class trong Ruby?
- 7. ruby regex quét so với = ~
- 8. trường Type-class với nhiều loại với 2 thông số khi loại lớp chỉ có một
- 9. Phương pháp lớp Ruby so với phương pháp trong Eigenclasses
- 10. Ruby thay thế cho void return type
- 11. Bộ chọn sắp xếp jQuery ("id" so với "class")?
- 12. cách đặt tiêu đề ['content-type'] = 'application/json' trong ruby
- 13. Ruby: Proc.new {'waffles'} so với proc {'waffles'}
- 14. Ruby on Rails: errors.add_to_base so với errors.add
- 15. Ruby on Rails so với Python
- 16. Hiểu ruby .class và .ancestors phương pháp
- 17. Mảng Ruby:% w so với% W
- 18. to_s so với to_str (và to_i/to_a/to_h so với to_int/to_ary/to_hash) trong Ruby
- 19. Ghép chuỗi so với nội suy trong Ruby
- 20. đối tượng So sánh trong ruby
- 21. Class vs Module trong việc thiết kế Ruby API?
- 22. Class ClassName <:: OtherClassName làm gì trong Ruby?
- 23. Ruby on Rails tạo ra trường model: type - các tùy chọn cho trường: type là gì?
- 24. So sánh ruby băm
- 25. Khả năng tương thích Mono với bool Type.op_Equality (Type, Type)
- 26. Scala Type-Inference cho Type Constructor
- 27. Ruby so sánh ngày
- 28. So sánh ba chiều trong ruby
- 29. So sánh hai mảng trong Ruby
- 30. Monitor.TryEnter với Generic Class
Nếu đó là từ đồng nghĩa, tại sao tôi lại gặp lỗi phương thức không xác định khi tôi gọi loại trên lớp tôi đã tự định nghĩa? Nhưng điều tương tự cũng không xảy ra khi tôi gọi phương thức lớp cho cùng một lớp. lỗi phương thức không xác định không giống như những gì bạn sẽ nhận được cho một phương pháp không dùng nữa. –
@ Chris Collins Tôi đoán là tài liệu đã tắt và đó không phải là một từ đồng nghĩa nghiêm ngặt. Điểm vẫn là Object # loại là một phương pháp không sử dụng. – runako
Tại sao sử dụng respond_to? –