如何将单个值附加到存储为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
答案 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.arr
为nil
,因为您没有对其进行初始化,所以当您调用它时: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
这将解决您的问题。