Ruby:我在 JavaScript 中编写的程序在 Ruby 中的工作方式不同

Ruby: Program I wrote in JavaScript not working the same way in Ruby

我最初在 JavaScript 中写了这篇文章,并张贴在这里寻求帮助(我得到了帮助)。然后我将它写在 Ruby 中,但它没有按预期工作。 Ruby.

中的代码看起来几乎相同

预期结果:29
实际结果:2639

prime = 0
temp = 0
factor = 3
i = 3
num = 13195

while factor < num
    if num % factor == 0
        while i < factor
            if factor % i == 0
                temp = prime
                break
            else
                temp = factor
            end
            i = i + 2
        end
        // i initializes back to 3 
        // so next factor can properly iterate through loop
        i = 3 
        prime = temp
    end
    factor = factor + 2
end
i = 3
puts prime

这是我作为 JavaScript 程序提出此问题时的答案 link:

在Javascript中,for (let i = 3; i < factor; i += 2)初始化i为3,然后循环。但是在您的 Ruby 代码中,您只在一开始就初始化了 i 一次,然后您的每个循环都在重复使用 i 的那个值而不将其重置回 3.

翻译 for 循环的 Ruby 方式是这样的

(3...factor).step(2) do |i|
  # loop code
end

这会创建一个局部块 i,它会在循环的每次迭代中重置,并且不会受到外部作用域的干扰。