gpt4 book ai didi

elixir - case 对于特定条件不返回任何内容

转载 作者:行者123 更新时间:2023-12-01 10:24:42 25 4
gpt4 key购买 nike

有这段代码:

defmodule TestQuery do

def build_query() do
Enum.map(["test1", "test2", "hello"], fn item ->
query(item)
end)
end

def query(item) do
case String.contains? item, "test" do
true -> item
false -> nil
end
end

end

如果我运行它,我将以这个列表结束:

iex(2)> TestQuery.build_query()
["test1", "test2", nil]

如何避免添加nil?或者对 false 子句什么也不做?

此示例是一个简单的查询方法示例,该查询可能返回 nil (404),我想构建一个包含成功查询但没有 nil 的列表 个项目。

最佳答案

我能想到的三种方式:

  1. 使用 Enum.filter/2 并从 query 返回 true/false:

    def build_query() do
    Enum.filter(["test1", "test2", "hello"], fn item ->
    query(item)
    end)
    end

    def query(item) do
    String.contains? item, "test"
    end

    如果您的实际 query 函数想要返回一个不是 item 的值,这将不起作用。

  2. 删除末尾的所有 nil 值:

    Enum.map(["test1", "test2", "hello"], fn item ->
    query(item)
    end) |> Enum.reject(&is_nil/1)

    如果 itemnil,这将不起作用,因为它也会被删除。

  3. 使用 Enum.flat_map 并返回一个空列表而不是 nil 并且在非 nil 的情况下返回一个非空列表:

    def build_query() do
    Enum.flat_map(["test1", "test2", "hello"], fn item ->
    query(item)
    end)
    end

    def query(item) do
    case String.contains? item, "test" do
    true -> [item]
    false -> []
    end
    end

关于elixir - case 对于特定条件不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48506050/

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