如何将单个元素添加到数组对象

时间:2015-10-05 01:57:58

标签: arrays ruby

如何将单个值附加到存储为Citations类对象的数组中?

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

2 个答案:

答案 0 :(得分: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(无论是什么)。

答案 1 :(得分:1)

在您的代码中,此行:(1...5).each { |x| cit.arr << x }失败,并显示错误消息:

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

如果您仔细阅读了错误消息,则会看到它显示:cit.arrnil,因为您没有对其进行初始化,所以当您调用它时:cit.arr << x,它&# 39;实际上是试图在<<上调用nil方法而失败,因为<<对象上没有实现NilClass方法。

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

您可以使用此类的initialize方法执行此操作:

class Citations
    attr_accessor :paper,:arr

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

这将解决您的问题。