2009-05-06 30 views
40

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

48

Đ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.

+0

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. –

+0

@ 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

+4

Tại sao sử dụng respond_to? –

15

#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 
+0

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. –

+0

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

+0

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

Các vấn đề liên quan