gpt4 book ai didi

Elixir检查字符串是否为整数

转载 作者:行者123 更新时间:2023-12-03 23:30:23 24 4
gpt4 key购买 nike

是否可以检查传入的字符串参数是否为整数?例如,我需要根据其 id ("12345") 或 external_id ("eUv9wWzZ48bMZsuII6ivCle2NHgIEPoMLWC9ioDV") 检索模型。这有可能实现吗?我尝试了 is_integer 但返回 false 因为它不尝试解析字符串。

def call(%{params: %{"id" => id}} = conn, module) when is_atom(module) and is_integer(id) do
ZB.Repo.get!(module, id)
|> check(conn)
end
def call(%{params: %{"id" => id}} = conn, module) when is_atom(module) do
ZB.Repo.get_by!(module, external_id: id)
end

最佳答案

这是 XY problem而且我相信您正在尝试以不正确的方式解决不存在的问题:)

根据我从您的输入中看到的,external_id 应该是长度为 40 的字母数字字符串。这里的关键字是 alphanumeric。也就是说,40 倍的“1”可能是 external_id。你知道吗? Integer.parse/2 完美解析:

iex|1 ▶ ["1"] |> List.duplicate(40) |> Enum.join |> Integer.parse
#⇒ {1111111111111111111111111111111111111111, ""}

也就是说,在这种情况下检查整数是无效,因为它可能会导致误报

您实际上需要做的是尝试通过external_id获取记录,可能基于它的长度或其他东西,然后回退到id 如果不成功。此外,二进制的长度可能确实在保护中检查(隐含地,通过引入中间包装二进制⇒位串。)

def call(%{params: %{"id" => id}} = conn, module) when is_atom(module) do
case ZB.Repo.get_by(module, external_id: id) do
{:ok, record} -> record
_ -> ZB.Repo.get!(module, id) |> check(conn)
end
end

关于Elixir检查字符串是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48690396/

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