ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效)

标签 ruby for-loop

def reverse(ary)
  result = []
  for result[0,0] in ary
  end
  result
end

assert_equal ["baz", "bar", "foo"], reverse(["foo", "bar", "baz"])

这行得通,我想了解原因。有什么解释吗?

最佳答案

如果我使用 each 而不是 for/in 重写它,它看起来像这样:

def reverse(ary)
  result = []

  # for result[0,0] in ary
  ary.each do |item|
    result[0, 0] = item
  end

  result
end

for a in b 基本上就是说,获取数组 b 中的每一项并将其分配给表达式 a。所以当它不是一个简单的变量时会发生一些神奇的事情。

array[index, length] = something 语法允许替换多个项目,甚至是 0 个项目。所以 ary[0,0] = item 表示在索引零处插入 item,替换零项。它基本上是一个 unshift 操作。


但实际上,只需将 each 方法与 block 一起使用即可。没有改变状态的主体的 for 循环必须是最迟钝和难以阅读的东西之一,乍一看它不会做你期望的事情。 each 提供的疯狂惊喜要少得多。

关于ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615937/

相关文章:

ruby-on-rails - 安装了 RVM,rvm 命令不起作用

ruby - 使用 Ruby 了解 AWS DynamoDB 中的属性

c++ - 如何检查矩阵的任何行是否包含所有 'A' ?

java - 使用 2 个 for 循环使用给定字符串创建三角形

python - 意外结果,在 Python 上操作字符串

ruby-on-rails - PG::TRDeadlockDetected:错误:检测到死锁

ruby - 模块嵌套代码风格偏好

ruby-on-rails - 记录当前用户 ruby​​ on rails 4.0

c++ - 基于范围的for循环对性能有好处吗?

Javascript for 循环问题