我正在尝试将以下JS代码翻译成Ruby。我不是在寻找解决方案,但是有人能让我知道我应该从Ruby中采取哪些概念来翻译?只需要一个地方开始。代码在这里:
var sum = 0;
for(var x = 0; x < 1000; x++) {
if (x%3 === 0 || x%5 === 0) {
sum += x;
}
}
console.log(sum);
答案 0 :(得分:1)
sum = 0
for x in 0..1000
if x % 3 == 0 || x % 5 == 0
sum += x
end
end
puts sum
但我只是做
puts (0..1000).inject {|acc, x| if x % 3 == 0 || x % 5 == 0; acc += x; end; acc}
请查看此内容以获取ruby语法http://learnxinyminutes.com/docs/ruby/,并在此处查看http://ruby-doc.org/core-2.2.2/Enumerable.html#method-i-inject以获取有关注入的信息。 (在大多数其他语言中称为折叠。)
答案 1 :(得分:1)
您的ECMAScript代码等同于以下更简单的版本:
console.log(Array.from({length: 1000}, (_, i) => i).
filter(n => n%3 === 0 || n%5 === 0).
reduce((acc, n) => acc + n));
这也正是人们如何用Ruby编写的:
puts (0...1000).select {|n| (n%3).zero? || (n%5).zero? }.inject(:+)
# => 233168