2015-10-05 103 views
2

如何將單個值附加到作爲類對象存儲的數組引用?如何將單個元素添加到數組對象

class Citations 
    attr_accessor :paper,:arr 

    def dothing() 
     return paper.to_s.length 
    end 
end 

cit = Citations.new 


#(1...5).each{ |x| cit.arr << x } # fails 
cit.arr = [1,2,3,4] # works if I add the entire array as one unit 
puts cit.arr 

回答

1

在代碼中,這條線:(1...5).each { |x| cit.arr << x }失敗,錯誤消息:

undefined method `<<' for nil:NilClass (NoMethodError) 

如果你仔細閱讀錯誤消息,您會看到,它表明:cit.arrnil因爲你沒有初始化等當你調用這個:cit.arr << x時,它實際上試圖在nil上調用<<方法並失敗,因爲<<方法未在NilClass對象上實現。

因此,您需要在致電cit.arr << x之前初始化arr,以便cit.arr不是nil

你可以做,在你的類的這樣的initialize方法:

class Citations 
    attr_accessor :paper,:arr 

    def initialize 
     @arr = [] 
    end 
# rest of the codes 
end 

這將解決您的問題。

3

由於未初始化數組arr而失敗。類改成這樣:

class Citations 
    attr_accessor :paper,:arr 
    def initialize 
     @arr = [] 
    end 
    def dothing() 
     return paper.to_s.length 
    end 
end 

當然,你的第二次嘗試正常工作,因爲通過使用

cit.arr = [1,2,3,4] 

你實際上對其進行初始化。

我可以看到類似的問題發生在paper(不管它是什麼)。