关于attr_accessor和def初始化

时间:2016-05-11 19:01:30

标签: ruby-on-rails ruby

我想使用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

2 个答案:

答案 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。您无法为其分配任何值。如果需要它到数组,则在使用之前将其初始化为数组。