这似乎是一个简单的事情,但我似乎没有找到一个简单的答案,我可以在grok.
所以我假设我有一个像这样的Elixir函数:
def fetch_card_ids(offset, total_cards) when offset < total_cards do url = "http://some.domanin?offset=#{offset}" response = HTTPotion.get url #return or yield response here fetch_card_ids(offset+24,total_cards) end
在C#中,我可以在迭代某些东西时产生一个返回值,当然这与递归不同但是:我可以在elixir的递归函数中做类似的事情吗?
当然,任何帮助都会非常感激.
如果你想要做的是"流"响应给调用者,那么Stream
s是一个很好的方法.例如,您可以使用Stream.unfold/2
:
def fetch_card_ids(offset, total_cards) do Stream.unfold offset, fn off when off < total_cards -> resp = HTTPotion.get(url) {resp, off + 24} _ -> nil end end
此流将在每次获取响应时"产生"响应,并在offset
获取大于时停止total_cards
.