我不是红宝石专家,这给了我麻烦。但是我将如何在ruby中创建一个对象/类数组呢?如何初始化/声明它?在此先感谢您的帮助。
这是我的课,我想创建一个数组:
class DVD
attr_accessor :title, :category, :runTime, :year, :price
def initialize()
@title = title
@category = category
@runTime = runTime
@year = year
@price = price
end
end
答案 0 :(得分:19)
Ruby是鸭子类型(动态类型) 几乎所有东西都是一个对象,所以你可以将任何对象添加到数组中。例如:
[DVD.new, DVD.new]
将创建一个包含2张DVD的数组。
a = []
a << DVD.new
将DVD添加到阵列中。查看Ruby API for the full list of array functions。
顺便说一下,如果要保留DVD类中所有DVD实例的列表,可以使用类变量执行此操作,并在创建新DVD对象时将其添加到该数组中。
class DVD
@@array = Array.new
attr_accessor :title, :category, :runTime, :year, :price
def self.all_instances
@@array
end
def initialize()
@title = title
@category = category
@runTime = runTime
@year = year
@price = price
@@array << self
end
end
现在,如果你这样做
DVD.new
您可以获取目前为止创建的所有DVD的列表:
DVD.all_instances
答案 1 :(得分:5)
为了在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
的标题,那么你可以这样做:
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
答案 2 :(得分:4)
many_DVD = Array.new(2){DVD.new}