rvi*_*ing 24
该不在乎变量_是一个非常特殊的变量,它匹配任何东西,并且从不绑定到一个值.当我知道那里有东西时使用它,但我不在乎它的价值是什么,我将永远不会使用.看到_永远不会被约束,它不能在表达式中使用,并且编译器将其标记为错误.
变量就像_Var是可以匹配的完全正常的变量,并且将绑定到值,这意味着它们可以在表达式中使用.前缀变量与意图_有关.编译器通常会警告您绑定在模式中但从未使用的变量,通常是错误的标志.但编译器不会警告前缀为like in的变量.意图是我想给变量一个名字,命名的东西很好,但我知道我永远不会使用它.__Var
请记住,这_实际上是唯一的特殊变量,它_Var是正常变量,如果使用则表现如此.如果你感觉有悖常理,那么你可以为所有变量加上前缀_,一切都会有效.
rai*_*7ow 20
我们在这里引用文档:
匿名变量由下划线(
_)表示,可在需要变量时使用,但可以忽略其值.[...]
_例如_Height,以下划线()开头的变量是普通变量,而不是匿名变量:然而,编译器会忽略它们,因为它们不会为未使用的变量生成任何警告.
换句话说,_Var当您需要匹配匹配的表达式时使用表单 - 但不想进一步使用它和/或您希望显示其含义._当你和编译器都不应该关心它将匹配的表达式时,你使用变量.
例1:
member(_, []) -> [].
Run Code Online (Sandbox Code Playgroud)
在这个功能中,第一次_匹配的内容并不十分清楚.但直接重写它,如下所示:
member(Elem, []) -> [].
Run Code Online (Sandbox Code Playgroud)
...如果使用标志warn_unused_vars集编译代码,将生成警告.但是,您仍然可以通过使用下划线变量使您的代码可读:
member(_Elem, []) -> [].
Run Code Online (Sandbox Code Playgroud)
例2:
{_, _, Some} = {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
这个元组匹配将完全正确,因为元组的前两个元素将被完全忽略.
{_Var, _Var, Some} = {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
然而,这种匹配将失败:虽然_Var不必使用,但它应该被"填充"相同的值!由于1不等于2,这里的条件失败.