我写了这个简单的类
class FibSequence
include Enumerable
def initialize(num)
@sequence = fib(num)
end
def fib(n)
vals = [1, 1]
return [1] if n == 1
return vals if n == 2
(n-2).times do
vals.push(vals[-1] + vals[-2])
end
return vals
end
def each(&block)
@sequence.each(&block)
end
end
我称之为:
f = FibSequence.new(6)
f.reject {| s | s.odd? }
f.each {| s | print(s,':')}
我期待=> [2,8] 但我得到=> 1:1:2:3:5:8:
答案 0 :(得分:2)
答案 1 :(得分:0)
reject
不会修改原始数组,但会返回修改后的副本。在您的代码中,第二个语句返回一个删除了奇数条目的数组,但是您要丢弃它,然后在原始未修改的数组上调用.each
。您需要对reject
返回的已修改数组执行操作:
f = FibSequence.new(6)
f.reject{|s| s.odd?}.each {|s| print(s,':')}
编辑:删除了使用reject!
的选项,因为该问题基于Enumerable
而不是Array
。