我试图从阵列中打印一个值但由于某种原因不能。 这是我的代码:
click = rightClick(mat, sel) #(click is a method that opens an input window. It returns an array of 5 values)
constLib << click
constNum=constLib.length
for i in 0..constNum
puts (constLib[i][1])
end
我收到错误说:
Error: #<NoMethodError: undefined method `[]' for nil:NilClass>
(eval):37:in `block (4 levels) in initialize'
(eval):34:in `each'
(eval):34:in `block (3 levels) in initialize'
-e:1:in `call'
有什么想法吗?
谢谢!
答案 0 :(得分:3)
..
具有包容性。这意味着,您正在访问超出范围的索引,即数组的长度。因此将其更改为...
,这是独占的。
但是,这并不是rubyists如何接近它,因为他们可能会对你使用for循环感到不满。最好使用each
constLib.each {|arr| puts arr[1]}
答案 1 :(得分:0)
如果你有一个包含5个项目的数组,则数组中的第一项是项目0,最后一项是项目4.
e.g。 0,1,2,3,4
你的for循环需要从0到(constNum-1),或者需要使用“...”独占运算符而不是包含“..”。
但是,你应该考虑使用每个
来浏览数组click = rightClick(mat, sel)
click.each do |item| {
puts item[0]
}
我已经改变了put来打印数组中的第一个项目。这可能是你要做的事情。这是项目[0],而不是我认为你最初写的,项目[1]。
答案 2 :(得分:0)
你应该constLib.each {|click| puts click[1]}