设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

试验 ruby迭代器奇怪的漏洞bug

查看数: 3266 | 评论数: 15 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2012-10-9 23:00

正文摘要:

ruby当中,数组和hash数据结构都可以使用迭代器。假设一个数组,遍历每一个元素,其中每访问一个元素,调用这个元素的一个方法update,使在遍历过程中又删除该数组中的某些元素,这个遍历结果会怎么样。 在Game_Map ...

回复

feizhaodan 发表于 2012-10-10 17:22:51
本帖最后由 feizhaodan 于 2012-10-10 18:28 编辑

其实比较安全的方法就是在遍历的时候,将要删除的要素改成nil,遍历后使用compact!方法清除nil要素。
然后这类讨论问题最好发到讨论区,原创技术发布区主要还是用来发布一些脚本或事件范例的囧
fux4 发表于 2012-10-10 14:20:14
qbjxiaolei 发表于 2012-10-10 14:15
怎么用的啊?能不能给个例子我看看哇。

是枚举类的内置方法
a=[b,c,d]
a.delete_if{|obj| obj.id%2==0}

点评

还有select一系列的/A\  发表于 2012-10-10 14:32
qbjxiaolei 发表于 2012-10-10 14:15:28
yangff 发表于 2012-10-10 13:20
敢加个clone吗?

怎么用的啊?能不能给个例子我看看哇。
fux4 发表于 2012-10-10 14:03:22
delete_if 。

点评

这个是一个内置方法吗?。。  发表于 2012-10-10 14:16
yangff 发表于 2012-10-10 13:20:52
敢加个clone吗?
pigsss 发表于 2012-10-10 11:58:01
动态数组遍历时修改数组本身就是不安全的吧 = =
完全可以遍历前后再进行修改
qbjxiaolei 发表于 2012-10-10 11:05:40
的确,删除后面的元素不会出问题应该,但是删除的元素位置大多都是不确定的可是。虽然性能会降低,我还是这样修改吧,遍历中要删除的元素放在一个其他的数组中,等遍历结束后再来删除。
6rp 发表于 2012-10-10 09:51:12
从后面删除吧。
a.reverse.each{|e| ...}
晴兰 发表于 2012-10-10 08:59:52
提示: 作者被禁止或删除 内容自动屏蔽
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-27 14:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表