我想使用attr_accessor将学校名称添加到数组中。
我的问题是' def initialize()'在这种情况下正在做
以便我可以使用
存储数据v1.school_name [0] =" myschoolname"
如果省略initialize()函数,我会收到错误
class StoreData
attr_accessor :school_name
def initialize
@school_name = []
end
end
v1 = Store_data.new
v1.school_name[0] = "myschoolname"
print v1.school_name[0]
v1.school_name[1] = "myschoolnamehighschool"
print v1.school_name
答案 0 :(得分:3)
在这种情况下,您使用空数组初始化@school_name
。如果你不这样做,它不会自动创建它,但它可以。该模式称为延迟初始化:
class StoreData
def school_name
@school_name ||= [ ]
end
end
s = StoreData.new
s.school_name << "Name 1"
s.school_name << "Name 2"
s.school_name
#=> [ "Name 1", "Name 2" ]
您无法为nil
值分配内容,默认情况下是实例变量。
如果需要,使用||=
运算符创建一个数组。
答案 1 :(得分:2)
attr_accessor只是一个属性,默认情况下为nil。您无法为其分配任何值。如果需要它到数组,则在使用之前将其初始化为数组。