繁体   English   中英

可变范围和循环错误

[英]Variable Scope and Looping Error

我有一个循环

suburb_gps = [-35.44454, 127.4323423]

tradies_in_area.delete_if do |tradie|
  gps_coor = suburb_gps

  tradie.tradie_locations.first.radius < (Geography.distance(tradie.tradie_locations.first.get_lat_and_lon, gps_coor) / 1000)
end

在循环中,您注意到我将变量gps_coor分配给suburb_gps 然后我在distance方法中使用gps_coor来确定两个坐标之间的距离。 我的主要问题是在第一个循环后, suburb_gps变量发生变化,并在每个循环后不断变化。 我不知道它为什么搞砸了。 get_lat_and_lon是我的模型类的实例方法

def get_lat_and_lon
  [self.latitude, self.longitude]
end

我不知道为什么suburb_gps变量在每次循环后都会发生变化。 任何帮助将非常感激。 谢谢。

以下是循环后suburb_gps等于的一些内容

2013-11-06T21:12:10.789459+00:00 app[web.1]: [-7.297875028610691e-286, 4.08087004920688e-285]
2013-11-06T21:12:10.789459+00:00 app[web.1]: [-1.2737194764833194e-287, 7.122461870468308e-287]

2013-11-06T21:12:10.789459+00:00 app[web.1]: [-2.223059861141241e-289, 1.2431041048742584e-288]
2013-11-06T21:12:10.789749+00:00 app[web.1]: [-3.87997140458426e-291, 2.16962595751127e-290]
2013-11-06T21:12:10.789897+00:00 app[web.1]: [-1.181906878110669e-294, 6.609058610793502e-294]
2013-11-06T21:12:10.789749+00:00 app[web.1]: [-6.771827589322435e-293, 3.786711649530626e-292]
2013-11-06T21:12:10.789897+00:00 app[web.1]: [-2.062816647499847e-296, 1.1534983321562906e-295]

2013-11-06T21:12:10.790298+00:00 app[web.1]: [-6.283698846544718e-300, 3.51375685669721e-299]
2013-11-06T21:12:10.790298+00:00 app[web.1]: [-1.0967123407597525e-301, 6.132662626389288e-301]
2013-11-06T21:12:10.790298+00:00 app[web.1]: [-3.6002942363823585e-298, 2.0132343812390454e-297]
2013-11-06T21:12:10.790298+00:00 app[web.1]: [-1.914124129351169e-303, 1.0703515474449596e-302]
2013-11-06T21:12:10.790298+00:00 app[web.1]: [-3.340776834904773e-305, 1.8681158656730845e-304]
2013-11-06T21:12:10.790579+00:00 app[web.1]: [-5.8307555343443306e-307, 3.260477266473944e-306]
2013-11-06T21:12:10.790579+00:00 app[web.1]: [-1.017658819531899e-308, 5.690606348639485e-308]
2013-11-06T21:12:10.790579+00:00 app[web.1]: [-1.77614970627906e-310, 9.93198172186515e-310]
2013-11-06T21:12:10.790579+00:00 app[web.1]: [-3.09996603829e-312, 1.733457822944e-311]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-1.648121e-317, 9.216062e-317]
2013-11-06T21:12:10.790579+00:00 app[web.1]: [-5.410461407e-314, 3.02545464546e-313]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-9.44303657e-316, 5.280414494e-315]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-5.02e-321, 2.8073e-320]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-0.0, 1.0e-323]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-2.8765e-319, 1.608505e-318]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-9.0e-323, 4.9e-322]
2013-11-06T21:12:10.790942+00:00 app[web.1]: [-0.0, 0.0]
2013-11-06T21:12:10.791683+00:00 app[web.1]: [-0.0, 0.0]
2013-11-06T21:12:10.791683+00:00 app[web.1]: [-0.0, 0.0]
2013-11-06T21:12:10.791683+00:00 app[web.1]: [-0.0, 0.0]
2013-11-06T21:12:10.791683+00:00 app[web.1]: [-0.0, 0.0]
2013-11-06T21:12:10.792060+00:00 app[web.1]: [-0.0, 0.0]

输出继续打印[-0.0, 0.0]直到循环完成。

你正在使gps_coor 引用相同的数组suburb_gps引用。 从那时起,两个变量都指向同一个对象,并且修改一个(可能是在Geography.distance发生?)会修改另一个。

你需要clonedup数组来代替:

gps_coor = suburb_gps.clone

通常,这将在需要修改其输入数组的方法内完成。 实际上,您应该在Geography.distance添加.clone ,并使用suburb_gps作为该方法的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM