Tôi có thể hiểu tại sao bạn cần một biến lớp để theo dõi những thứ như tổng số đối tượng đã được khởi tạo trong lớp đó.Bạn đã bao giờ sử dụng "biến thể hiện lớp" trong bất kỳ mã Ruby nào của bạn chưa?
Và tôi có thể hiểu tại sao bạn cần một biến thể hiện ví dụ để lưu trữ các thuộc tính của một đối tượng cụ thể trong lớp đó.
Nhưng biến thể hiện lớp Tôi dường như không thể biện minh được.
Như tôi đã hiểu, chúng giống như biến lớp ngoại trừ chúng là không hiển thị cho các lớp con theo cách biến lớp là.
Dường như việc sử dụng cho mục này sẽ khá hạn chế. Hoặc là tôi sai? Có ai tìm thấy một sử dụng tốt cho các biến thể hiện lớp trong mã của họ? Hay bạn có thể đưa ra một ví dụ về một tình huống mà loại sắc thái này sẽ có giá trị?
Cảm ơn. Ví dụ tuyệt vời (s).Vì vậy, về cơ bản, nếu chúng tôi chỉ có các biến lớp, chúng tôi sẽ không thể thực hiện những việc như số lượng được bản địa hóa này cho A, B và C - chúng tôi sẽ bị mắc kẹt tương đương với num_subclass_instances của bạn. Tôi nghĩ rằng tôi nhận được nó ngay bây giờ. Phần duy nhất của mã của bạn mà tôi không hiểu là: def self.inherited (subclass) subclass.instance_eval {@count = 0} end. Cái đó làm cái gì? –
Vì vậy, tôi đã khởi tạo A @count theo định nghĩa của A, nhưng tôi cần phải khởi tạo @count thành 0 cho tất cả các lớp con của A, điều đó là mã gì. Khi A được thừa kế bởi 'lớp con', chúng ta mở lớp con và khởi tạo @count của nó thành 0. Hãy thử loại bỏ nó, và bạn sẽ thấy NoMethodErrors khi B và C được khởi tạo, vì Ruby sẽ không biết cách thêm 1 vào nil (giá trị mặc định của @count nếu không được khởi tạo) – rampion
OK. Cảm ơn. Nhân tiện, tôi đang tìm kiếm tài liệu trên example_eval và tìm thấy nó cho 1.87 (http://www.rubybrain.com/api/ruby-1.8.7/doc/index.html?a=M000295&name=instance_eval) nhưng có vẻ giống như nó đã biến mất từ 1.90 (http://www.rubybrain.com/api/ruby-1.9.0.2/doc/index.html?a=C00000022&name=Object). –