"two" _ -> "many" end 是否可以通-6ren">
gpt4 book ai didi

for-loop - 如何通过管道输入 for 循环 Elixir

转载 作者:行者123 更新时间:2023-12-04 17:15:31 24 4
gpt4 key购买 nike

如果我想进入一个案例,我会做以下事情:

amount
|> calculate
|> case do
1 -> "one"
2 -> "two"
_ -> "many"
end

是否可以通过管道进入 for以类似的方式循环,例如:
amounts
|> calculate
|> for do
IO.inspect &1
end

或者
amounts
|> calculate
|> Kernel.for(&IO.inspect/1)

我知道我可以使用 Enum方法,但我更好奇上述方法是如何工作的。

最佳答案

不幸的是,这是不可能的。它适用于 case 的原因是case是一个宏,它的第一个参数是一个值,第二个参数是匹配子句。 for另一方面,只有一个参数包括所有子句和 do 块:

iex(1)> quote do
...(1)> for a <- 1..10, b <- 1..10, do: a + b
...(1)> end
{:for, [],
[
{:<-, [],
[{:a, [], Elixir}, {:.., [context: Elixir, import: Kernel], [1, 10]}]},
{:<-, [],
[{:b, [], Elixir}, {:.., [context: Elixir, import: Kernel], [1, 10]}]},
[
do: {:+, [context: Elixir, import: Kernel],
[{:a, [], Elixir}, {:b, [], Elixir}]}
]
]}

(如您所见, for 接受一个参数,即整个值 a <- 1..10, b <- 1..10, do: a + b 。)

for 做到最好是通过管道进入匿名函数。它并不漂亮,但当我想要 for 的功能时,我已经使用过几次了。 Enum.each 不支持或 Enum.map (多个子句、内联过滤器、 into 等)。
iex(2)> 1..5 |> (fn x -> for(i <- x, do: IO.puts(i)) end).()
1
2
3
4
5
[:ok, :ok, :ok, :ok, :ok]

关于for-loop - 如何通过管道输入 for 循环 Elixir ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027149/

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