使用方法鏈接我想修改下面的代碼,以便在每次迭代時打印變量mult和n。什麼方法可以幫助完成這個?可以使用什麼方法來打印變量,從而在整個範圍內迭代迭代?
(1..3).inject {|mult, n| mult * n}
使用方法鏈接我想修改下面的代碼,以便在每次迭代時打印變量mult和n。什麼方法可以幫助完成這個?可以使用什麼方法來打印變量,從而在整個範圍內迭代迭代?
(1..3).inject {|mult, n| mult * n}
Enumerable#tap是你所需要的
(1..3).inject { |mult, n| (mult * n).tap { |next_mult| p [n, mult, next_mult] } }
像這樣:
>> (1..3).inject {|mult, n| r = mult * n; p "mult = #{mult}, n = #{n}, mult * n = #{r}"; r}
"mult = 1, n = 2, mult * n = 2"
"mult = 2, n = 3, mult * n = 6"
這看起來比tap
簡單的解決方案給我。這可能是一個品味問題。
(1..3).inject do |mult, n|
puts "#{mult} #{n}"
mult * n
end
1 2
2 3
=> 6
要回答清風的關於迭代次數等問題,docs說:
如果你不明確指定備忘錄的初始值,然後使用收集的第一個元素作爲備忘錄的初始值。
除非我誤解了他的問題,這並不*完全*做他所需要的......對於我來說,這個代碼在每次迭代時輸出'mult * n',但我相信他想要獨立輸出在每一步(所以,你的答案輸出兩個數字,但他希望4)。我可能是錯的,雖然... – mdunsmuir
感謝您的注意,我錯過了。編輯帖子。 –
不錯。我想你可以使用'tap'在'方法鏈式'中執行你喜歡的任何代碼。 :) – mdunsmuir