Max*_*nge 1 elixir pattern-matching
有没有办法模式匹配像 [_head | 中 | _last] 在 Elixir 中?也就是说,我想匹配至少包含三项内容(但通常更多)的列表,但只匹配除头部和最后一个元素之外的所有内容。
例子:
def match_middle([_head | middle | _last]) do
IO.inspect middle
end
match_middle [1, 2, 3, 4, 5]
>>> [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
Elixir 列表实际上是可以追溯到 Lisp 早期的缺点列表。
iex(1)> foo = [1 ,2 , 3]
[1, 2, 3]
iex(2)> [ head | [ middle | tail ]] = foo
[1, 2, 3]
iex(3)> middle
2
Run Code Online (Sandbox Code Playgroud)
所以,当我们把它写成[1,2,3]是真的[1, [2,[3,[]]]]
但是,这实际上并没有涵盖您要问的内容。可能是这样的
def match_middle([_head | [ second | tail]]) when tail != [] do
flip_tail = Enum.reverse(tail)
[end | rest] = flip_tail
[second | Enum.reverse(rest) ]
end
Run Code Online (Sandbox Code Playgroud)