Project1

标题: 谁能总结下each的使用。 [打印本页]

作者: miantouchi    时间: 2019-10-24 20:54
标题: 谁能总结下each的使用。
论坛里面都说for in 不好用each do 代替
大家是所有的地方都用each吗?
我查了下F1,我了去each怎么这么多地方都有

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

each.png

作者: ppspssss    时间: 2019-10-24 20:57
听說for循環就是each的慢效率版, 我覺得如果这樣没必要新手还是用for好,
作者: 寒凌天    时间: 2019-10-25 01:44
我很负责任的告诉你,追求执行效率那是老手逐渐提高时才需要考虑的事情。对于新手来讲,更推荐你用for循环,因为简单不容易犯错。
至于这两种循环差距到底有多大?如果是你自己写代码的话,估计你把你所有的for循环都换成each do,一整套下来节约的时间可能还不到1毫秒
也就是说把这个时间放大一千倍,可能你都感觉不出来。

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

至于老手编写的那些脚本,数据处理越来越大,而且老手技术也是迎刃有余,这时候在区使用each do才是对的,新手完全不需要考虑这些。
作者: hyrious    时间: 2019-10-25 06:59
就 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 的需求全消灭了……
作者: soulsaga    时间: 2019-10-25 13:15
我想问下..
用FOR怎么无限循环?
作者: warback    时间: 2019-11-7 10:37
学到了!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1