gpt4 book ai didi

erlang - 功能重叠规范

转载 作者:行者123 更新时间:2023-12-02 03:49:31 25 4
gpt4 key购买 nike

我有一个像这样的简单函数:

def extract_text({_, _, [text]}) when is_binary(text), do: text
def extract_text(_), do: nil

我为其添加的规范是:

@spec extract_text(any) :: nil
@spec extract_text({any, any, [text]}) :: text when text: String.t

但是当我运行拨号器时,出现以下错误:

lib/foo/bar.ex:1: Overloaded contract for 'Elixir.Foo.Bar':extract_text/1 has overlapping domains; such contracts are currently unsupported and are simply ignored

我想我明白其原因,但我无法真正想出解决方案。此功能的正确规范是什么?

最佳答案

您应该意识到,即使您定义了相同数量的多个函数(接受相同数量的参数),从外部世界来看,这也被认为只是一个函数。这意味着,您需要定义函数签名,并且只有这个函数签名应该定义类型规范。

尝试以下操作:

@spec extract_text(any) :: String.t | nil
def extract_text(arg)

def extract_text({_, _, [text]}) when is_binary(text), do: text
def extract_text(_), do: nil

关于erlang - 功能重叠规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45915180/

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