#inject
の中にwhile
ループを使用しようとしています。しかし、最後のメモはある時点では無くなり、なぜ私は理解できません。#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
になるん:ここに私の例である(私はちょうど期待される結果を表示する例を#each
を使用しますか)?
ありがとう、@ジョナサン! 'while'の戻り値に関する'解説 'は、私がしなければならなかった'メモ 'を返すだけでなく、助けになりました。ありがとう! – user3097405