2016-05-02 6 views
2

[1] = [ head | tail ]を実行するとコンパイルエラーが発生することがiexに気付きました。しかし、関数を定義すると、次のようになります。なぜ[head | tail]構文は、引数として使用するとElixirの単一の要素配列にマッチしますか?

def simple_func([ head | tail ]) do 
    IO.inspect(head) 
    IO.inspect(tail) 
end 

引数が一致しているようです。私はフードの下で何かが起こっていると仮定しています、そして、私はそれが何であるか知りたいと思うでしょう。

答えて

6

マッチするパターンがない権利、=の左側に来る:

iex(1)> [head | tail] = [1] 
[1] 
iex(2)> head 
1 
iex(3)> tail 
[] 
+0

が実現されました私が間違っていると投稿した直後。明確化のためにありがとう –

1

テールが残りのリストです。 1つの引数のリストでは、空のリストなので、実際には一致します。

0

3例 1.ヘッドとテールの前に定義されていませんがあります。

iex(1)> [1] = [head | tail] 
** (CompileError) iex:5: undefined function head/0 
    (stdlib) lists.erl:1353: :lists.mapfoldl/3 
    (stdlib) lists.erl:1354: :lists.mapfoldl/3 
  1. 頭と尾が一致する値で定義されています iex(1)> head = 1 1 iex(2)> tail = [] [] iex(3)> [1] = [head|tail] この場合、ヘッドとテール([head|tail])の組み合わせはとても一致し、誤り

  2. 頭部と尾部が一致しない値

`

iex(1)> head = 2 
2 
iex(2)> tail = [] 
[] 
iex(3)> [1] = [head|tail] 
** (MatchError) no match of right hand side value: [2] 
で定義されていない [1]と等しいです

この場合、頭と尾の組み合わせ([head|tail])は[2]に等しいので、一致エラー

関連する問題