首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Elixir中的递归函数返回/生成一个值?

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

Stack Overflow用户
提问于 2015-12-27 09:51:12
回答 2查看 907关注 0票数 3

这似乎是一件简单的事情,但我似乎没有找到一个足够简单的答案,让我去摸索。

因此,假设我有一个类似于这样的药剂功能:

代码语言:javascript
运行
复制
   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#中,我可以在迭代某些东西时产生一个返回值,这当然与递归不一样,但无论如何:我可以在灵丹妙药中的递归函数中做类似的事情吗?

当然,任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-27 09:59:27

如果您想要做的是“流”对调用者的响应,那么Stream是一个很好的方法。例如,您可以使用Stream.unfold/2

代码语言:javascript
运行
复制
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时停止。

票数 5
EN

Stack Overflow用户

发布于 2015-12-27 11:24:37

这样使用流怎么样?

代码语言:javascript
运行
复制
top = div(total_cards,24) +1 # integer division
result = Stream.map( 0..top, fn (offset) -> 
  url = "http://some.domanin?offset=#{24*offset}"
  HTTPotion.get url
  end ) |> Enum.to_list

在这里,Enum.to_list只是在最后“生成”列表,但您也可以使用Stream.take等工具,在逐步的时间内从该列表中处理

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34479310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档