为什么 elixir 函数的类型规范末尾有 () 或括号?

Why is there () or parenthesis at the end of the type specs of elixir functions?

例如,flat_map 的类型说明如下。

flat_map(Enumerable.t(), (element() -> Enumerable.t())) :: Enumerable.t()

输入输出数据类型末尾有很多括号。为什么会有?

在 TypeScript、Haskell 或 Rust 等其他语言中,数据类型只是没有 () 的类型。

提前致谢。

因为某些类型可以参数化,所以您可以指定一个整数列表:list(integer)

以防有人需要。 在 specs

中,我们可以选择两种方式来键入 () 或不键入具有零元数和类型的函数

请记住,这仅适用于 specs

  • 它更短,更易读
  • 在极少数情况下可能会出现歧义

混合格式不添加 () 规格

透析器未发出额外警告

应用编译期间未发出额外警告

有关更多信息,请查看 hexdocs - 他们在 @spec 中使用了这两个选项 https://hexdocs.pm/elixir/typespecs.html