在more ruby way of doing project euler #2中,部分代码是
while((v = fib(i)) < 4_000_000)
s+=v if v%2==0
i+=1
end
有没有办法将i += 1
更改为更具功能性的编程风格构造?
我能想到的最好的是
Float::MAX.to_i.times do |i|
v = fib(i)
break unless v < 4_000_000
s += v if v%2==0
end
因为您无法在浮点数上调用.times
。
答案 0 :(得分:16)
答案 1 :(得分:10)
有一个预定义的(在1.9.2中)常量Float::INFINITY
,所以你可以写
1.upto(Float::INFINITY) do |i|
...
end
(您也可以使用Enumerator
和take_while
,将问题彻底解决,使其看起来更像Haskell或Python,但take_while
贪婪并构建数组。)< / p>
答案 2 :(得分:3)
Ruby 2.5引入了开放式范围:
angular.json