Ruby - 在迭代循环时保护变量

时间:2012-03-08 18:01:22

标签: ruby loops while-loop scope

我正在尝试通过循环执行嵌套数组的操作。循环执行一次,但后来我得到一个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 个答案:

答案 0 :(得分:1)

您可以使用dup

input_is_comment_format(array[i], comments.dup)

因此您可以使用要处理的数组副本,并且不会修改原始数组。