我正在重做迄今为止我在Ruby中完成的18个欧拉挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法弄清楚我做错了什么。具体来说,下面的代码有什么问题?我尝试将所有斐波纳契数字添加到400万以下。
start = Time.now
def sum_fibonacci_till_4_million
previous_previous_value = 1
previous_value = 2
i = 2
fibo = Array.new
while previous_value < 4000000 do
fibo.push(previous_previous_value)
fibo.push(previous_value)
temp = previous_value
previous_value = previous_value + previous_previous_value
previous_previous_value = temp
i++
end
return fibo.inject(:+)
end
puts "The answer is #{sum_fibonacci_till_4_million()} and it took #{(start - Time.now)
* 1000} milliseconds."
我得到的输出是
2.rb:22: syntax error, unexpected keyword_end
2.rb:27: syntax error, unexpected $end, expecting keyword_end
...ime.now) * 1000} milliseconds."
...
之前我遇到过此错误,并设法使用for循环修复它。但显然我的最终陈述有问题。我不知道是什么。
有人可以帮助我吗?
答案 0 :(得分:7)
i++
。写i += 1
。
Ruby has no pre/post increment/decrement operator。例如,x ++或x--将无法解析。更重要的是,++ x或--x什么都不做!实际上,它们表现为多个一元前缀运算符:-x == --- x == ----- x == ......要递增数字,只需写入x + = 1。
[ruby-talk:18951] Re: notes from a Ruby newbie - blade
|没有后期或预增量或减量运算符!
否。因为我不能给它们面向对象的语义。它们基本上是作业。