"!","?","_"和"."的含义是什么?elixir中的语法

ard*_*ama 15 elixir elixir-framework

我需要关于灵药理解下面的语法帮助!,?,_,和..elixir函数中的语法角色是什么?例如Repo.get!.

我不确定它们只是函数名称,还是有角色.虽然我知道.是为了调用匿名函数.而_对于任何一个或可变参数?

bit*_*ker 22

! - 关于失败例外的职能公约.

? - 返回布尔值的函数约定

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

.- 如您所述,用于调用匿名函数,但也用于访问模块函数,如Mod.a(arg).

  • *以*_开头的变量(例如`_foobar`)和*仅由*_`组成的变量之间确实存在重要差异(例如`def foo(_,_bar)do,_bar end `).尝试使用`_`导致编译时'未绑定变量'错误.前缀为下划线的变量`_bar`用于防止对未使用的变量发出警告,并且不会阻止编译.它们的使用只会产生一个警告:"警告:设置后使用下划线变量"_bar".前导下划线表示应该忽略变量的值......" (2认同)

cod*_*hal 14

首先!

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

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

一个很好的例子是Enum.fetch!(它也有一个相同的Enum.fetch,它不会引发异常).在给定的索引处绑定元素(从零开始).如果给定位置超出集合范围,则引发OutOfBoundsError.

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

_ - 这将忽略函数或模式匹配中的参数.如果你愿意,可以在underscore.Ex - _base之后给出一个名字

这通常用于尾递归函数的末尾.一个很好的例子是电源功能.如果你想将任何数字基数提高到0,结果就是1,所以基数是什么并不重要

defp getPower(_base,0), do: 1
Run Code Online (Sandbox Code Playgroud)

. - 用于访问模块内的任何功能或您建议调用匿名功能

iex(1)> square = fn(number) -> number * number end
iex(2)> square.(4)
Run Code Online (Sandbox Code Playgroud)

  • 只需注意:`getPower`函数可以使用模式匹配:`defp getPower(_base,0),执行:1 (2认同)