Tôi nghĩ Object là tổ tiên của mọi người, bao gồm cả Class. Vì vậy, tôi nghĩ rằng nó phải là Class.class == Object. Tôi cảm thấy một chút bối rối và xoắnTại sao Object.class == Class trong Ruby?
Trả lời
lớp trả về lớp (#type) không phải là tổ tiên. Lớp của đối tượng là Class. Lớp của lớp là Lớp. Lớp là một đối tượng. Sự thật trong quảng cáo: Tôi chưa bao giờ học Ruby, nhưng mối quan hệ Object-Class có là Smalltalk được đặt ra 30 năm trước.
Đây là cách nó hoạt động trong ruby 1.9:
lớpClass.class = Class
Class.superclass = Module
Module.class = class
Module.superclass = Object
Object.class = Class
Object.superclass = BasicObject
BasicObject.class = Class
BasicObject.superclass = nil
Object
's là Class
(kể từ Object
chính nó là một lớp), và Object
là tổ tiên của Class
.
Có tham chiếu vòng tròn, nó khá phức tạp. Đề nghị cá nhân của tôi, nếu bạn không thực sự cần phải chơi với nó, đừng đi đến đó.
Class, Object, Module và mọi tầng lớp khác trường của một lớp Lớp :)
Class.class == Module.class == Object.class == Hash.class == Lớp
class là cũng là một đối tượng (giống như bất kỳ đối tượng khác trong hệ thống) nhưng nó không phải là trực tiếp thể hiện của đối tượng, nó là một thể hiện của một bắt nguồn lớp (class trong trường hợp này)
Class.superclass.superclass == Object (với Module ở giữa)
Đối tượng chính nó cũng là một lớp. vì vậy Object.class == Lớp
Lớp, Mô-đun và đối tượng có phụ thuộc vòng tròn vì chúng nằm trong lõi của mô hình OO.
Object.class.superclass.superclass == Object
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
Phụ thuộc vòng tròn hoạt động vì đây là tất cả các lớp được tích hợp sẵn. Chúng là một phần của thời gian chạy Ruby cốt lõi và được thiết lập theo cách này lúc khởi động và không được thêm vào theo cách bạn thường thêm một lớp. Thời gian chạy có sức mạnh để thiết lập các con trỏ tuy nhiên nó muốn, và các nhà thiết kế đã chọn để làm điều đó theo cách này. –
- 1. Tại sao "[self class] == [super class]"?
- 2. Tại sao Grails Service Class là Singleton?
- 3. Tại sao phương thức getResourceAsStream nằm trong lớp Class?
- 4. class() so với type() trong Ruby
- 5. Hiểu ruby .class và .ancestors phương pháp
- 6. Tại sao nên tránh @@ class_variables trong Ruby?
- 7. Tại sao `a = a`` nil` trong Ruby?
- 8. Tại sao Ruby có Numeric.new?
- 9. Tại sao ng-class = "ng-app" phá vỡ AngularJS?
- 10. tại sao .is_a? và .class cho kết quả mâu thuẫn?
- 11. Tại sao [super class] và [self class] tạo ra cùng một kết quả?
- 12. Ruby: tại sao lại gọi to_ary?
- 13. Tại sao (python | ruby) được giải thích?
- 14. thông số tại Khởi Class' trong VBA
- 15. tại sao ruby scanf quá chậm?
- 16. Class vs Module trong việc thiết kế Ruby API?
- 17. Class ClassName <:: OtherClassName làm gì trong Ruby?
- 18. Tại sao Ruby phơi bày biểu tượng?
- 19. Trong Ruby tại sao nil.id trả về 4?
- 20. Tại sao lại coi 0 là True trong Ruby?
- 21. Tại sao có một String # thay thế trong Ruby?
- 22. Trong ruby, file.readlines.each không nhanh hơn file.open.each_line, tại sao?
- 23. Is (loại) String.class một kiểu con của (kiểu) Object.class?
- 24. Tại sao không có phương pháp sao chép sâu trong Ruby?
- 25. Ruby: Tại sao Array.sort lại làm chậm đối tượng lớn?
- 26. Tại sao một số người sử dụng phương pháp Class # thay vì Class.method trong thư từ?
- 27. Tại sao doesnt relative_require không hoạt động trên Ruby 1.8.6?
- 28. Bộ sưu tập rác đối tượng Ruby Class
- 29. Tại sao `gửi` thất bại với tinh chỉnh Ruby 2.0?
- 30. Tại sao Puppet và Chef sử dụng Ruby?
metaclasses làm việc khác nhau trong Ruby: họ nhận được tiêm vào chuỗi phương pháp tra cứu, do đó Ruby không có hai hệ thống phân cấp song song của các lớp và metaclasses, nhưng, như bạn nói, những điều cơ bản là giống hệt nhau. –
@Jorg: cảm ơn. Ngay sau khi tôi hoàn thành dự án hiện tại của tôi, tôi sẽ nhận được trên đường ray và ruby, tôi đã nghe rất nhiều lời khen ngợi rằng tôi đang hấp dẫn :) –
Cảm ơn bạn. Tôi nghĩ rằng tôi rõ ràng về mối quan hệ bây giờ. Thông tin của @ Jörg_W_Mittag cũng giúp ích. Đó là, các lớp và Metaclasses là hai khái niệm khác nhau nhưng liên quan. – fwoncn