我试图在#inject
内使用while
循环。但是,最后的备忘录在某些时候会变成零,我不明白为什么。这是我的例子(我用#each
的例子,是想说明预期的结果):#inject中的备忘录如何工作?
class TestClass
BASE_ARRAY = [5, 1]
def test_method(value)
result = []
BASE_ARRAY.each do |item|
while item <= value
result << item
value -= item
end
end
result
end
def test_method_alternate(value)
BASE_ARRAY.inject do |memo, item|
while item <= value
p memo
# memo << item (if left, returns NoMethodError for nil Class)
value -= item
end
end
end
end
solution_one = TestClass.new.test_method(11)
p solution_one # => [5, 5, 1]
solution_two = TestClass.new.test_method_alternate(11)
p solution_two
# => []
[]
nil
如何累加器成为nil
?
谢谢,@jonathan!关于'while'的返回值的'解释'帮了我很大的忙,再加上'备忘录',我不知道我必须这样做。谢谢! – user3097405