Tôi có một lớp Ruby được gọi là LibraryItem
. Tôi muốn kết hợp với mọi cá thể của lớp này một mảng các thuộc tính. mảng này dài và trông giống nhưBiến thể hiện lớp Ruby và thừa kế
['title', 'authors', 'location', ...]
Lưu ý rằng những thuộc tính không thực sự coi là phương pháp, chỉ là một danh sách các thuộc tính rằng một LibraryItem
có.
Tiếp theo, tôi muốn tạo một lớp con của LibraryItem
được gọi là LibraryBook
có một loạt các thuộc tính bao gồm tất cả các thuộc tính của LibraryItem
nhưng cũng sẽ bao gồm nhiều hơn nữa.
Cuối cùng tôi sẽ muốn nhiều lớp con của LibraryItem
mỗi phiên bản riêng của họ về mảng @attributes
nhưng mỗi cách thêm vào LibraryItem
's @attributes
(ví dụ, LibraryBook
, LibraryDVD
, LibraryMap
, vv).
Vì vậy, đây là nỗ lực của tôi:
class LibraryItem < Object
class << self; attr_accessor :attributes; end
@attributes = ['title', 'authors', 'location',]
end
class LibraryBook < LibraryItem
@attributes.push('ISBN', 'pages')
end
này không hoạt động. Tôi nhận được lỗi
undefined method `push' for nil:NilClass
Nếu nó là để làm việc, tôi muốn một cái gì đó như thế này
puts LibraryItem.attributes
puts LibraryBook.attributes
để đầu ra
['title', 'authors', 'location']
['title', 'authors', 'location', 'ISBN', 'pages']
(Added 02-May-2010) Một giải pháp để làm điều này là làm cho @attributes
một biến cá thể đơn giản và sau đó thêm các thuộc tính mới cho LibraryBoot
trong phương thức initialize
(điều này được đề xuất bởi các demas trong một o f câu trả lời). Trong khi điều này chắc chắn sẽ làm việc (và, trên thực tế, những gì tôi đã làm tất cả cùng), tôi không hài lòng với điều này vì nó là tối ưu phụ: tại sao các mảng không thay đổi này được xây dựng mỗi khi một đối tượng là tạo?
Điều tôi thực sự muốn là có các biến lớp có thể kế thừa từ một lớp cha nhưng khi thay đổi trong lớp con không thay đổi trong lớp cha.
Đây không phải những gì là Tôi muốn. Tôi muốn biến thể hiện của lớp cho LibraryItem chỉ chứa ['title', 'authors', 'location',] trong khi cùng một biến mẫu cho LibraryBook chứa ['title', 'authors', 'location',] plus [ 'ISBN', 'trang']. Tôi sẽ chỉnh sửa câu hỏi để làm rõ hơn. – rlandster
Điều này có lỗi cú pháp. Ngoài ra, thuộc tính đối tượng lớp * thuộc tính * thậm chí không được kết nối với hằng số * ATTRIBUTES *. –