gpt4 book ai didi

Elixir:如何处理 "environment"

转载 作者:行者123 更新时间:2023-12-01 00:59:11 25 4
gpt4 key购买 nike

我有一个相当大的函数“管道”来处理输入流。
在管道开始之前,会创建一个“环境” map ,该 map 将提供额外的
管道中函数的信息。我现在在做什么,这似乎
Elixir 所要求的就是明确地将环境传递给每个函数。

我对每个函数的要求的可读性有点不安
管道(以及它们调用的许多函数)需要环境作为参数。
另一方面,我当然明白这可能只是“做这件事”的一部分
功能上”。

我的问题是:我是否遗漏了一些东西,也许是一个成语来处理这个问题,
或者我应该习惯于传递看似“额外”的参数作为
函数式编程世界?

谢谢。

最佳答案

我建议为此使用代理。以下是完全组成的,但向您展示了不同的操作,并且类似于您可能想要的处理方式:

def process(data) do
{:ok, agent} = Agent.start_link(fn -> %{data: data, count: 0} end)
process(data, agent)
end

def process(agent) when is_pid(agent) and bar > 0 do
transformed = do_stuff_with(data)
Agent.get_and_update(agent, fn %{count: count} = state ->
updated = %{state | :data => transformed, :count => count + 1}
{updated, updated}
end
process(agent)
end

def process(agent) when is_pid(agent) and bar == 0 do
Agent.cast(agent, fn %{count: count} = state ->
%{state | :count => count + 1}
end
process(agent)
end

def process(agent) when is_pid(agent) do
Agent.get(agent, fn state -> state.data end)
end

不是传递状态,而是传递代理的 PID,并根据需要获取/更新代理的状态。

关于Elixir:如何处理 "environment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com