2015-01-30 3 views
1

Я пытаюсь напечатать значение из массива, но по какой-то причине не может. Вот мой код:Ruby - вывести значение из массивов

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' 

Есть идеи?

Спасибо!

ответ

3

.. включительно. Это означает, что вы получаете доступ к индексу, связанному с ограничениями, то есть к длине массива. Следовательно, измените его на ..., который является эксклюзивным.

Однако это не так, как к нему подходят рубисты, поскольку они могут на вас нахмуриться за использование цикла. Это лучше использовать each

constLib.each {|arr| puts arr[1]} 
0

Если у вас есть массив из 5 элементов, первый элемент в массиве элемент 0, а последний пункт пункт 4.

например 0,1,2,3,4

Для цикла for необходимо перейти от 0 до (constNum-1) или использовать эксклюзивный оператор «...» вместо включенного «..».

Тем не менее, следует рассмотреть вопрос о переходе через массив, используя каждый

click = rightClick(mat, sel) 
click.each do |item| { 
    puts item[0] 
} 

Я изменил путы, чтобы напечатать первый элемент в массиве. Возможно, это было то, что вы делали. Это элемент [0], и не так, как я думаю, вы изначально писали, item [1].

0

Вы должны просто сделать constLib.each {|click| puts click[1]}

Смежные вопросы