我有以下Elixir脚本:
a = [1, 2]
b = [a | 3]
IO.puts is_list(b)
IO.inspect b
我认为我的代码b = [a | 3]
错了,这会导致错误。
但是当我运行这个脚本时,我得到了这个结果:
true
[[1, 2] | 3]
最后一行输出中的管道符号是什么意思?
答案 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。