您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python和Ruby中each循环引用变量问题(一个隐秘BUG?)

5b51 2022/1/14 8:17:57 python 字数 2131 阅读 365 来源 www.jb51.cc/python

虽然这个问题我是在Python里遇到的,但是用Ruby解释起来比较容易一些。在Ruby里,遍历一个数组可以有很多种方法,最常用的两种无非是for和each:复制代码代码如下:arr=[\'a\',\'b\',\'c\']arr.each{|e|?putse}f

概述

虽然这个问题我是在 Python 里遇到的,但是用 Ruby 解释起来比较容易一些。在 Ruby 里,遍历一个数组可以有很多种方法,最常用的两种无非是 for 和 each:

看下面一段代码

问题其实出自我在用 Python 写的一个小程序中的一段,代码类似于这样:

不幸的是,由于像刚才所说的那样,for 并没有每次都单独创建 scope ,因此 closure 全部引用到了同一个变量上,导致所有的属性值取出来都是最后一个属性了。看到这样诡异的 bug ,如果是在 C/C++ 里面,我肯定要怀疑是内存或者指针的问题了。不过想了半天才终于恍然大悟!不过 Python 里面没有 Ruby 那么方便的 each 可以用,lambda 用起来也很鸡肋,所以最后通过定义一个局部的函数解决了:

值得庆幸的是,block 的这个“特性”在 Ruby 1.9 中已经被去除了,block 的参数只能是正常参数,所以就不再存在这样的问题了。希望 1.9 尽快普及吧!

总结

以上是编程之家为你收集整理的Python和Ruby中each循环引用变量问题(一个隐秘BUG?)全部内容,希望文章能够帮你解决Python和Ruby中each循环引用变量问题(一个隐秘BUG?)所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶