2012-03-08 5 views
0

루프를 통해 중첩 된 배열로 액션을 수행하려고합니다. 루프가 한 번 실행되지만 변수가 재설정되지 않기 때문에 nomethod 오류가 발생합니다.루비 - 루프를 반복하면서 변수를 보호하십시오.

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

BTW, 당신이 찾고있는 단어가 [좌표] (http://dictionary.reference.com/browse/coordinate)라고 생각합니다. – Phrogz

답변

1

당신은 dup을 사용할 수

input_is_comment_format(array[i], comments.dup) 

은 그래서 당신과 함께하고 원래의 배열은 수정되지 않습니다 일할 수있는 배열의 복사본을 가지고있다.

관련 문제