gpt4 book ai didi

ruby - 愚弄 for 迭代器

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:35 26 4
gpt4 key购买 nike

下面的一段代码来 self 审查过的一个程序。它计算第 n 个斐波那契数:

for i in 2..input.to_i
fibonacci = a + b
a = b
b = fibonacci
i += 1 # <- This
end

注释行 i += 1 实际上什么也没做。

i 是 block 参数是否正确? IE。 for 语句在功能上是否与 (2..input.to_i).each do |i| 相同?

i += 1 实际上不影响迭代器。迭代器是否可以使用 foreachtimes 循环移动到某个迭代?

也欢迎任何关于这些迭代器如何工作的引用。

最佳答案

首先,这是您需要的引用资料:

回答您的问题:

  1. 说 i 是 block 参数是否正确?

    没有。 for 没有引入新的变量范围或使用 block 。

  2. for 语句在功能上是否与 (2..input.to_i).each do |i| 相同?

    没有。 for i in ... 在执行 for 的范围内创建一个变量 i,而 each won'不要那样做(IIRC 早期的 Ruby 版本就是这样做的)。

  3. 迭代器是否有可能移动到某个迭代?

    您可以像这样跳过或重做单个迭代(也可能在 each 迭代中):

    wait_until = Time.now + 10
    for i in [1,2,3]
    redo if Time.now < wait_until # actively sleep
    next if i.even?
    end

    但是你不能跳转到任意位置。

    为了更好地控制迭代,您需要一个 Enumerator 实例。如果你调用 each 没有参数/ block ,你将得到一个枚举器:

    enum = [1,2,3].each
    begin
    while i = enum.next
    puts i
    end
    rescue StopIteration
    end

    # equivalent to
    # [1,2,3].each {|i| puts i }

    enum 现在可以响应 rewindpeek 等(参见上面链接的文档)。

关于ruby - 愚弄 for 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25176182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com