“!”,“?”,“_”和“。”的含义是什么?长生不老药中的语法

What's the meaning of "!", "?", "_", and "." syntax in elixir

我需要帮助来理解 elixir !?_. 中的以下语法。 这些语法在 elixir 的功能中起什么作用?例如 Repo.get!.

我不确定它们只是函数名,还是有作用。虽然我知道 . 用于调用匿名函数。 _ 用于任意或可变参数?

! - 失败时引发异常的函数约定。

? - return 布尔值

函数的约定

_ - 用于忽略参数或部分模式匹配表达式。

. - 正如您提到的用于调用匿名函数,但也用于访问模块函数,例如 Mod.a(arg).

首先是 !?

它们是通常应用于函数名称末尾的命名约定,不是任何特殊语法。

! - 如果函数遇到错误,将引发异常。

一个很好的例子是 Enum.fetch!(It also has a same Enum.fetch,它不会引发异常)。找到给定索引处的元素(从零开始)。 如果给定位置超出集合范围,则引发 OutOfBoundsError。

? - 用于显示函数将 return 一个布尔值,true 或 false。一个很好的例子是 Enum.any? 如果函数对任何值都为真,则 return 为真,否则 return 为假

_ - 这将忽略函数或模式匹配中的参数。喜欢的话可以在underscore.Ex之后起个名字 - _base

这个常用于尾递归函数的结尾。一个很好的例子是幂函数。如果你想将任何数字基数增加到 0 结果它是 1,所以基数是什么并不重要

defp getPower(_base,0), do: 1

. - 用于访问模块内的任何函数或按照您的建议调用匿名函数

iex(1)> square = fn(number) -> number * number end
iex(2)> square.(4)