KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a Ruby class called LibraryItem . I want to associate with every instance of this class an array of attributes. This array is long and looks something like ['title', 'authors', 'location', ...] Note that these attributes are not really supposed to be methods, just a list of attributes that a LibraryItem has. Next, I want to make a subclass of LibraryItem called LibraryBook that has an array of attributes that includes all the attributes of LibraryItem but will also include many more. Eventually I will want several subclasses of LibraryItem each with their own version of the array @attributes but each adding on to LibraryItem 's @attributes (e.g., LibraryBook , LibraryDVD , LibraryMap , etc.). So, here is my attempt: class LibraryItem < Object class << self; attr_accessor :attributes; end @attributes = ['title', 'authors', 'location',] end class LibraryBook < LibraryItem @attributes.push('ISBN', 'pages') end This does not work. I get the error undefined method `push' for nil:NilClass If it were to work, I would want something like this puts LibraryItem.attributes puts LibraryBook.attributes to output ['title', 'authors', 'location'] ['title', 'authors', 'location', 'ISBN', 'pages'] (Added 02-May-2010) One solution to this is to make @attributes a simple instance variable and then add the new attributes for LibraryBoot in the initialize method (this was suggested by demas in one of the answers). While this would certainly work (and is, in fact, what I have been doing all along), I am not happy with this as it is sub-optimal: why should these unchangi
Tags (comma-separated)
Save Edits
Cancel