当前位置:  开发笔记 > 编程语言 > 正文

如何从Elixir中的递归函数返回/生成值?

如何解决《如何从Elixir中的递归函数返回/生成值?》经验,为你挑选了1个好方法。

这似乎是一个简单的事情,但我似乎没有找到一个简单的答案,我可以在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的递归函数中做类似的事情吗?

当然,任何帮助都会非常感激.



1> whatyouhide..:

如果你想要做的是"流"响应给调用者,那么Streams是一个很好的方法.例如,您可以使用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.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有