Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 为什么要声明一个永远不会使用的变量或函数?(_foo)_Elixir - Fatal编程技术网

Elixir 为什么要声明一个永远不会使用的变量或函数?(_foo)

Elixir 为什么要声明一个永远不会使用的变量或函数?(_foo),elixir,Elixir,我是Elixir的新手,在阅读了下划线变量/函数之后,我对它们的实际用例有点困惑。为什么要费心定义一个永远不会使用的变量或函数 我很熟悉在模式匹配中使用uu,当您想忽略匹配的某些部分时,它们可能是密切相关的,但我正在努力解决这个问题。以这种方式声明的函数将被排除在导入之外,但可以在内部使用 函数参数(也是变量)必须设置,因为arity是固定的,下划线使它们的使用更加透明:我知道我的回调得到3个参数,但我只需要第二个 我不知道是否有以这种方式声明的正常变量。以这种方式声明的函数将从导入中排除,但可

我是Elixir的新手,在阅读了下划线变量/函数之后,我对它们的实际用例有点困惑。为什么要费心定义一个永远不会使用的变量或函数


我很熟悉在模式匹配中使用uu,当您想忽略匹配的某些部分时,它们可能是密切相关的,但我正在努力解决这个问题。

以这种方式声明的函数将被排除在导入之外,但可以在内部使用

函数参数(也是变量)必须设置,因为arity是固定的,下划线使它们的使用更加透明:我知道我的回调得到3个参数,但我只需要第二个


我不知道是否有以这种方式声明的正常变量。

以这种方式声明的函数将从导入中排除,但可以在内部使用

函数参数(也是变量)必须设置,因为arity是固定的,下划线使它们的使用更加透明:我知道我的回调得到3个参数,但我只需要第二个


我不知道是否有这样声明的正常变量。

主要原因是多子句函数中使用的模式匹配:

def process( :drivers_license, number ) do
  # process here ...
end

def process( :passport, number ) do
  # process here ...
end

def process( :unkown, _ ), do: nil

主要原因是多子句函数中使用的模式匹配:

def process( :drivers_license, number ) do
  # process here ...
end

def process( :passport, number ) do
  # process here ...
end

def process( :unkown, _ ), do: nil

我不确定忽略函数的用例是什么,但是忽略变量的用例是给变量起一个名字,这样如果你将来想取消它,你就知道该取消哪个了。比较这两个例子:

def process_result({:ok, _, _, duration, count} do
  # do something with duration & count
end
以及:

想象一下几个月后回来阅读这段代码。在第一个示例中,如果没有查看代码并找到调用此函数的位置,就无法立即清楚这两个被忽略的值是什么。是时间戳然后是用户,还是用户然后是时间戳

在第二个示例中,很明显这两个值是timestamp,然后是user。如果您以后关心这些值中的任何一个,只需删除下划线并按照函数中的正常值访问变量即可:

def process_result({:ok, _timestamp, user, duration count} do
  # do something with user, duration and count
end

另外值得注意的是,如果使用下划线前缀变量,Elixir将给您一个警告。下面是一个小示例函数,它将给出一个警告:

fn(_x) -> _x end
下面是警告(我在一些换行符中添加了):


我不确定忽略函数的用例是什么,但是忽略变量的用例是给变量起一个名字,这样如果你将来想取消它,你就知道该取消哪个了。比较这两个例子:

def process_result({:ok, _, _, duration, count} do
  # do something with duration & count
end
以及:

想象一下几个月后回来阅读这段代码。在第一个示例中,如果没有查看代码并找到调用此函数的位置,就无法立即清楚这两个被忽略的值是什么。是时间戳然后是用户,还是用户然后是时间戳

在第二个示例中,很明显这两个值是timestamp,然后是user。如果您以后关心这些值中的任何一个,只需删除下划线并按照函数中的正常值访问变量即可:

def process_result({:ok, _timestamp, user, duration count} do
  # do something with user, duration and count
end

另外值得注意的是,如果使用下划线前缀变量,Elixir将给您一个警告。下面是一个小示例函数,它将给出一个警告:

fn(_x) -> _x end
下面是警告(我在一些换行符中添加了):


您是否有忽略函数的示例?很抱歉,对于函数,我的意思是“未导入”而不是“忽略”。你关于变量的回答正是我所需要的,谢谢!您是否有忽略函数的示例?很抱歉,对于函数,我的意思是“未导入”而不是“忽略”。你关于变量的回答正是我所需要的,谢谢!