2012-03-08 4 views
0

Я пытаюсь выполнить действие с вложенным массивом через цикл. Цикл выполняется один раз, но затем я получаю ошибку nomethod, потому что переменная не сбрасывается.Ruby - защита переменной при повторении через цикл

array = [[9, 2, 0, 0], [4, 1, 2, 2], [7, 1, 5, 5], [6, 1, 3, 1]] 
comments = [[0, 0, 0], [1, 1, 1], [2, 2, 2]] 

def shift_comments(array) 
    array.each {|x| x.shift} 
end 

def map_distance_coordinants(array) 
    array2 = array.map {|x,y| [Math.sqrt(x*x + y*y)]} 
    array2 
end 

def input_is_comment_format(array, comments) 

    distance_coordinants = shift_comments(comments) 

    mapped_coordinanats = map_distance_coordinants(distance_coordinants) 

    print mapped_coordinanats 
    print comments 
end 

i = 0 
while i < array.length 
    input_is_comment_format(array[i], comments) 
    i += 1 
end 

Возвращает:

[[0.0], [1.4142135623730951], [2.8284271247461903]][[0, 0], [1, 1], [2, 2]] 
temp4.rb:9:in `block in map_distance_coordinants': undefined method `*' for nil:NilClass (NoMethodError) 

Как я могу защитить «комментарии», так что я могу использовать его для каждой итерации цикла? Благодарю.

+1

У меня возникли проблемы с пониманием того, что вы хотите от всего этого кода. Если вы не получите хорошие ответы, вы можете рассмотреть вопрос об этом в более общем случае и указать, что вы хотите для вывода. – Phrogz

+0

Кстати, я думаю, что слово, которое вы ищете, - [координата] (http://dictionary.reference.com/browse/coordinate). – Phrogz

ответ

1

Вы можете использовать dup:

input_is_comment_format(array[i], comments.dup) 

поэтому у вас есть копия массива работать и исходный массив не будет изменен.

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