首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby类实例变量和继承

Ruby类实例变量和继承
EN

Stack Overflow用户
提问于 2010-05-02 14:22:13
回答 8查看 21.3K关注 0票数 18

我有一个名为LibraryItem的Ruby类。我希望这个类的每个实例都有一个属性数组。这个数组很长,看起来像这样

代码语言:javascript
复制
['title', 'authors', 'location', ...]

请注意,这些属性并不是真正的方法,只是LibraryItem拥有的属性列表。

接下来,我想创建一个名为LibraryBookLibraryItem子类,它有一个属性数组,其中包含LibraryItem的所有属性,但还将包含更多属性。

最终,我需要LibraryItem的几个子类,每个子类都有自己版本的数组@attributes,但每个子类都添加到LibraryItem@attributes中(例如,LibraryBookLibraryDVDLibraryMap等)。

所以,这是我的尝试:

代码语言:javascript
复制
class LibraryItem < Object
  class << self; attr_accessor :attributes; end
  @attributes = ['title', 'authors', 'location',]
end

class LibraryBook < LibraryItem
  @attributes.push('ISBN', 'pages')
end

这不起作用。我得到了错误

代码语言:javascript
复制
undefined method `push' for nil:NilClass

如果它能工作,我会想要这样的东西

代码语言:javascript
复制
puts LibraryItem.attributes 
puts LibraryBook.attributes

输出

代码语言:javascript
复制
['title', 'authors', 'location']
['title', 'authors', 'location', 'ISBN', 'pages']

(2010年5月2日新增)一种解决方案是使@attributes成为一个简单的实例变量,然后在initialize方法中为LibraryBoot添加新的属性(这是由demas在其中一个答案中提出的)。

虽然这肯定是可行的(事实上,这也是我一直在做的),但我对此并不满意,因为它不是最优的:为什么每次创建对象时都要构造这些不变的数组?

我真正想要的是类变量可以从父类继承,但在子类中更改时不会在父类中更改。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2752641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档