在Elixir列表的检查字符串中找到管道字符是什么意思?

时间:2016-11-10 05:04:56

标签: elixir

我有以下Elixir脚本:

a = [1, 2]
b = [a | 3]
IO.puts is_list(b)
IO.inspect b

我认为我的代码b = [a | 3]错了,这会导致错误。

但是当我运行这个脚本时,我得到了这个结果:

true
[[1, 2] | 3]

最后一行输出中的管道符号是什么意思?

2 个答案:

答案 0 :(得分:3)

|字符称为cons运算符,用于将elixir术语链接到另一个elixir术语以构建链接列表。所有“正确”列表都以空列表结束,如下所示:[1 | [2 | [ 3 | []]]]但实际上您可以使用任何一个elixir术语结束列表,此时它将变为“不正确”列表,如[1 | [2 | :three]]]

您看到的是输出而不是[[1,2],3],因为您的列表是“不正确的”列表。

这实际上是非常有用的输出,因为为了在它上进行模式匹配,你必须使用相同的形式。 [[a,b] | c]会匹配[[a,b],c]不会的位置。

答案 1 :(得分:2)

|运算符将列表拆分为head和tail。 Head是第一个元素,tail是另一个列表中的其他内容,或者只是空列表。

考虑一下:

a = [1, 2, 3]
a = [x | y] # x = 1, y = [2, 3]
hd(a) == x # true
tl(a) == y # true


b = [1]
b = [x | y] # x = 1, y = []
hd(b) # 1
tl(b) # []

当你有[1,3]这样的构造时,这意味着它是improper list