gpt4 book ai didi

list - 是否可以选择管道输出插入 Elixir 函数 args 的位置?

转载 作者:行者123 更新时间:2023-12-04 19:03:11 25 4
gpt4 key购买 nike

考虑一个(难闻的,非惯用的)函数,如下所示:

def update_2d(array, inds, val) do
[first_coord, second_coord] = inds

new_arr = List.update_at(array, second_coord, fn(y) ->
List.update_at(Enum.at(array, second_coord),
first_coord, fn(x) -> val end) end)
end

此函数将接收一个列表列表、一个包含两个索引的列表以及一个要插入到列表列表中由索引指定的位置的值。

作为让这个更 Elixir-ey 的第一步,我开始铺设管道:
array 
|> Enum.at(second_coord)
|> List.update_at(first_coord, fn(x) -> val end)

这让我大部分时间都在那里,但是 如何将该输出通过管道传输到最后一个 List.update_at 的匿名函数中称呼? 我可以将它嵌套在原始调用中,但这似乎放弃了:
List.update_at(array, second_coord, fn(y) -> 
array
|> Enum.at(second_coord)
|> List.update_at(first_coord, fn(x) -> val end)
end)

最佳答案

您可以简单地绑定(bind)到一个变量来捕获您的第一个结果,然后在第二个 List.update_at/3 中替换它称呼

def update_2d(array, inds = [first_coord, second_coord], val) do
updated =
array
|> Enum.at(second_coord)
|> List.update_at(first_coord, fn(x) -> val end)

List.update_at(array, second_coord, fn(x) -> updated end)
end

您也可以使用 capture运算符(operator)这样做:
  def update_2d(array, inds = [first_coord, second_coord], val), do:    
array
|> Enum.at(second_coord)
|> List.update_at(first_coord, fn(x) -> val end)
|> (&(List.update_at(array, second_coord, fn(y) -> &1 end))).()

我发现使用变量更具可读性,但选项就在那里。

关于list - 是否可以选择管道输出插入 Elixir 函数 args 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165509/

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