我需要帮助理解elixir !
,?
,_
和.
中的以下语法。
elixir函数中的语法角色是什么?例如Repo.get!
。
我不确定它们只是函数名称,还是有角色。虽然我知道.
用于调用匿名函数。并_
为任何或变量?
答案 0 :(得分:22)
!
- 提出失败例外情况的公约。
?
- 返回布尔值的函数约定
_
- 用于忽略参数或模式匹配表达式的一部分。
.
- 正如您所提到的那样,用于调用匿名函数,但也用于访问模块函数,例如Mod.a(arg)
。
答案 1 :(得分:13)
首先!和?
它们是通常应用于函数名称末尾的命名约定,并且不是任何特殊语法。
! - 如果函数遇到错误,将引发异常。
一个很好的例子是Enum.fetch!(它也有一个相同的Enum.fetch,它不会引发异常)。在给定的索引处给出元素(从零开始)。 如果给定位置超出集合的范围,则引发OutOfBoundsError。
? - 用于显示函数将返回布尔值,为true或false。一个很好的例子是Enum.any?,如果函数对任何值都为真,则返回true,否则返回false
_
- 这将忽略函数或模式匹配中的参数。如果你愿意,你可以在underscore.Ex - _base
这通常用于尾递归函数的末尾。一个很好的例子是电源功能。如果你想将任何数字基数提高到0,结果就是1,所以无论基数是什么
都无关紧要defp getPower(_base,0), do: 1
.
- 用于访问模块内的任何函数或建议您调用匿名函数
iex(1)> square = fn(number) -> number * number end
iex(2)> square.(4)