erlang:元组(或列表)中的占位符

时间:2014-12-26 02:18:48

标签: erlang

我想整理我的Eralng代码,我发现有很多问题如下:

A = {Tid,_Tv0,_Tv1,Tv2,Tv3}

有没有办法清理代码:A = {Tid,SomewayReplace(4)} ???

UPDATE1:

像@Pascal一样的例子,有没有办法简单的代码A = {T,_,_,_,_,_}喜欢A = {T,SomewayReplace(4)}来取代那4个符号_ ???

UPDATE2

在实际项目中,如果某些记录包含很多元素,我发现它迫使我重复写符号_,所以我想知道是否有任何方法可以简单呢???

2 个答案:

答案 0 :(得分:0)

写A = Something意味着你试图将A与Something匹配或如果A未绑定,则将Something指定给A.无论如何,必须定义Something。

你可以在写作中找到一些捷径。例如,如果要将函数的结果赋给A,请验证结果是5个元素的元组并将第一个元素赋值给T,您可以写:

A = {T,_,_,_,_} = f(Param).

_T的含义与任何变量完全相同。它只是说编译器在代码中没有使用此变量时不发出警告。当您想要忽略变量的值但仍然保持其含义的痕迹时,它在模式匹配中经常出现。

<强> [编辑]

无法编写{T, SomewayReplace(4)},但您可以使用记录。记录是标记的元组(第一个元素是标识此记录的原子。它不短于小元组的占位符,但它更清晰,您不需要记住元组中信息的位置,当你需要在元组中添加一个新元素时,更容易修改你的代码。语法将是

-record(mytuple,{field1,...,fieldx,...}. ... A = #mytuple{fieldx = T} = f(Param).

waerning:记录由编译器管理,因此在构建时必须知道所有内容(#mytuple {Fieldx = T}是非法的,Fieldx不能是变量)。

答案 1 :(得分:0)

为什么不使用唱片?然后,您只匹配要提取的字段。作为一种副作用,您可以使代码更容易调试,因为您必须首先使用原子来命名元组。