doing the first Project Euler question: summing the multiples of 3 and 5 between 1 and 1000, I came up with this (pretty simple)
sum = 0
1.upto(999) { |i| sum += i if 0 == i%3 || 0 == i%5 }
sum
but I thought this would work but it doesn’t, can someone show me what I’m doing wrong, or why it doesn’t work?
1.upto(999).inject(0) { |sum, i| sum + i if 0 == i%3 || 0 == i%5 }
thanks!
injectpasses the result of the block through to the next iteration as the first argument. Your block will returnnilwhen yourifstatement is false, which then gets passed back in assum.To get the correct answer, the block should return the current sum when it’s false: