为了在 Ruby 中创建对象数组:
创建数组并将其绑定到名称:
array = []
将您的对象添加到其中:
array << DVD.new << DVD.new
您可以随时将任何对象添加到数组中。
如果您希望访问DVD
该类的每个实例,那么您可以依赖ObjectSpace
:
class << DVD
def all
ObjectSpace.each_object(self).entries
end
end
dvds = DVD.all
顺便说一句,实例变量没有被正确初始化。
以下方法调用:
attr_accessor :title, :category, :run_time, :year, :price
自动创建attribute
/attribute=
实例方法来获取和设置实例变量的值。
定义的initialize
方法:
def initialize
@title = title
@category = category
@run_time = run_time
@year = year
@price = price
end
设置实例变量,尽管没有参数。实际发生的是:
- 读取器
attribute
方法称为
- 它读取未设置的变量
- 它返回
nil
nil
成为变量的值
您要做的是将变量的值传递给initialize
方法:
def initialize(title, category, run_time, year, price)
# local variables shadow the reader methods
@title = title
@category = category
@run_time = run_time
@year = year
@price = price
end
DVD.new 'Title', :action, 90, 2006, 19.99
此外,如果唯一需要的属性是DVD
's 标题,那么您可以这样做:
def initialize(title, attributes = {})
@title = title
@category = attributes[:category]
@run_time = attributes[:run_time]
@year = attributes[:year]
@price = attributes[:price]
end
DVD.new 'Second'
DVD.new 'Third', price: 29.99, year: 2011