2016-05-11 4 views
1

attr_accessorを使って配列にスクール名を追加したいと思います。attr_accessorとdef初期化に関して

私の質問は、場合[0] = "myschoolname" 私は

v1.school_nameを使用してデータを保存できるように、この場合には

をやっていることを 'デフ初期化()'

です私はこのような場合、あなたは空の配列で@school_nameを初期化しているではエラー

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

注:引数リストは何も書き込まないので、 'def()'を使わずに 'def initialize'し、' Store_data'の代わりに 'StoreData'のような名前をつけてみましょう。 – tadman

答えて

2

attr_accessorは属性にすぎず、デフォルトではnilです。値を割り当てることはできません。配列に必要な場合は、配列として初期化してから使用してください。

+0

"' 'attr_accessor'は属性に過ぎません"、それはメソッドではありませんか? – orde

3

を取得し、初期化()関数を省略します。そうしないと自動的に作成されませんが、それは可能です。そのパターンの呼ば遅延初期化は:

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値に何かを割り当てることはできません。

これは、||=演算子を使用して必要に応じて配列を作成します。

関連する問題