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

Project1

 找回密码
 注册会员
搜索
查看: 3924|回复: 21
打印 上一主题 下一主题

[已经解决] 谁能总结下each的使用。

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14626
在线时间
2197 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2019-10-24 20:54:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
论坛里面都说for in 不好用each do 代替
大家是所有的地方都用each吗?
我查了下F1,我了去each怎么这么多地方都有

each.png (4.7 KB, 下载次数: 25)

each.png

Lv4.逐梦者

梦石
0
星屑
14629
在线时间
2152 小时
注册时间
2016-9-20
帖子
861
2
发表于 2019-10-24 20:57:57 | 只看该作者
听說for循環就是each的慢效率版, 我覺得如果这樣没必要新手还是用for好,

点评

哈哈,只是学习,让我全部替换我也没那个水平  发表于 2019-10-25 11:35
我发的贴子大多未经整理是草稿抱歉
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3117
在线时间
205 小时
注册时间
2019-9-16
帖子
224
3
发表于 2019-10-25 01:44:13 | 只看该作者
我很负责任的告诉你,追求执行效率那是老手逐渐提高时才需要考虑的事情。对于新手来讲,更推荐你用for循环,因为简单不容易犯错。
至于这两种循环差距到底有多大?如果是你自己写代码的话,估计你把你所有的for循环都换成each do,一整套下来节约的时间可能还不到1毫秒
也就是说把这个时间放大一千倍,可能你都感觉不出来。

新手写的代码,只要不是牵扯长文本拼接以及死循环,一般执行效率不会低的,因为代码太简单了,怎么运行都花不了多少时间。
新手最需要注意的不是去考虑执行效率,而是能达到目的的情况下,尽可能让代码简单化,这样更不容易犯错。

至于老手编写的那些脚本,数据处理越来越大,而且老手技术也是迎刃有余,这时候在区使用each do才是对的,新手完全不需要考虑这些。

点评

别说是新手,老手在刚写完脚本测试的时候也经常出语法错误等问题,如果写的代码自己都陌生,会加大阅读难度,降低工作效率。熟练后再去尝试吧  发表于 2019-10-25 11:45
追求执行效率确实是对的,但是并不适合你现在的阶段。对于新手来说尽量使用那些“一眼就能看出问题出在哪里”的代码。  发表于 2019-10-25 11:44
只是一个方向吧,也不是直达送each后马上都能换for的,毕竟还是for用的顺手了。  发表于 2019-10-25 11:36
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9682
在线时间
570 小时
注册时间
2017-9-28
帖子
208
4
发表于 2019-10-25 06:59:21 | 只看该作者
就 RMXP 来说 for 和 each 还真是一回事……
我们推荐用 each 主要有两点

1. 隐藏迭代变量(RMVA 起)

  1. i = 42
  2. for i in 0...3 do p i end
  3. p i #=> 2
复制代码
这里外部的 i 被 for 里的 i 改变了,写代码更容易出 bug
  1. i = 42
  2. (0...3).each { |i| p i }
  3. p i #=> 42
复制代码
注意,这个特性 RMVA 里才有效,RMXP 里仍会修改外部 i

2. 隐藏不必要的迭代下标

迭代一个数组怎么写?
  1. for i in 0...arr.size do p arr[i] end
复制代码
实际上我们可以……
  1. for x in arr do p x end
复制代码
实际上这就是……
  1. arr.each { |x| p x }
复制代码
因为维护下标容易产生加一减一问题(算不清左右边界),这里不再赘述

当然,each 也可以引入下标变量,用 each_with_index
  1. arr.each_with_index { |x, i| p [x, i] }
复制代码
这样一来我们就把 for 的需求全消灭了……

点评

这样啊,学到了!  发表于 2019-11-2 16:27
两个点包含头尾,三个点不包含结尾,0...3 就是 0, 1, 2  发表于 2019-11-2 15:39
请教大神,0...3中间正常应该是2个点吧,3个点有什么特殊含义吗?  发表于 2019-11-2 13:23
跟着打了一遍,第一个实例果然是,打印结果i=2也改变了修改外部。  发表于 2019-10-25 13:49
XP的ruby解释器这么睿智吗……  发表于 2019-10-25 09:59

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 cuxia
miantouchi + 1 精品文章

查看全部评分

喵喵喵
回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
5
发表于 2019-10-25 13:15:34 | 只看该作者
我想问下..
用FOR怎么无限循环?

点评

原来除以0不会报错的啊,用for i in 0..2147483647也行吧!毕竟这个数是int取值范围的极限,再高就溢出了。  发表于 2019-11-1 12:50
1.0除0=无限  发表于 2019-10-25 23:24
问得来..你p一下不就知道了..P出来的结果是infinity  发表于 2019-10-25 23:22
1.0/0 啥意思  发表于 2019-10-25 21:08
谢大神指导..我很赞同  发表于 2019-10-25 17:22
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
79
在线时间
8 小时
注册时间
2019-10-10
帖子
6
6
发表于 2019-11-7 10:37:24 | 只看该作者
学到了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-27 08:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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