【问题标题】:How can i pass a list as argument for a function element by element in Elixir?如何在 Elixir 中逐个元素地传递一个列表作为函数元素的参数?
【发布时间】:2020-03-20 03:25:52
【问题描述】:

我有一个接收 2 个参数的函数 (lex_raw_tokens)。另一个函数有 2 个元素列表,我需要将它们作为参数传递给另一个函数,但逐个元素。

在原始代码中,该函数仅接收 1 个参数,我使用Enum.flat_map(sal, &lex_raw_tokens/1) 调用它,sal 是我要传递的列表。这行得通,但后来我不得不更改 lex_raw_tokens 以接收 2 个参数而不是 1 个。

我尝试使用 Enum.flat_map(sal, &lex_raw_tokens(&1, line)) 解决问题,虽然这在技术上有效,但 line 作为整个列表而不是单个元素传递。

我对 Elixir 还是很陌生,我还没有找到任何其他功能来替换 flat_map 来满足我的需求,我还没有找到像这样使用 flat_map 的方法。

我还应该提到,我传递的列表具有可变长度,所以我不能蛮力解决这个问题。此外,两个列表的长度相同并且有关系,所以我需要将sal 的第一个元素与line 的第一个元素一起使用,第二个与第二个元素一起使用,依此类推。

【问题讨论】:

    标签: list function enums arguments elixir


    【解决方案1】:

    Enum.zip/2 是你的朋友。

    sal = ~w|one two three|
    line = ~w|apple orange lemon|
    
    sal
    |> Enum.zip(line)
    |> Enum.flat_map(&lex_raw_tokens(elem(&1, 0), elem(&1, 1)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2012-05-24
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多