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

时间:2018-06-21 15:40:48

标签: ruby loops primes prime-factoring

我最初是用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程序要求时的答案链接:
https://stackoverflow.com/a/50970934/7217977

1 个答案:

答案 0 :(得分:4)

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

Ruby的for循环翻译方式如下

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

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