从Javascript转换为Ruby

时间:2015-07-17 16:00:22

标签: javascript ruby

我正在尝试将以下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);

2 个答案:

答案 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