初学 ruby,在用 eulerproject 练手。其中第二题题目如下 斐波那契数列中的每一项被定义为前两项之和。从 1 和 2 开始,斐波那契数列的前十项为:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
考虑斐波那契数列中数值不超过 4 百万的项,找出这些项中值为偶数的项之和。
fib = Enumerator.new { |y|
a = 1; b = 2;
loop {
y << a
a, b = b, a + b
}
}
p fib.take_while { |x|
x < 4e6 and x % 2 == 0
}.reduce(:+) # => nil
其中 fib.take_while 获取数列 中小于 400w 的偶数,失败了,返回空数组。
可是,如下缺能正确运行
fib.take_while{|x|
x<4e6
} # => [1,2,3,5,....]
求解释