5

私はelixir lang を使って Elixir プログラミングを学んでいrecord brace syntaxます。

これはサンプルです:

defrecord FileInfo, atime: nil, accesses: 0
defmodule FileAccess do
  def was_accessed?(FileInfo[accesses: 0]), do: false
  def was_accessed?(FileInfo[]),            do: true
end

著者は、Elixir がコンパイル時にレコードをタプルに拡張すると考えています。それで

def was_accessed?(FileInfo[accesses: 0]), do: false

以下と同じです:

def was_accessed?({ FileInfo, _, 0 }), do: false

しかし、Elixir シェルに入力すると、次のようになります。

iex(13)> FileInfo[access: 0] == {FileInfo, nil, 0}
true
iex(14)> FileInfo[access: 0] == {FileInfo, 0, 2}
false

結果は、に等しいことが判明しFileInfo[access: 0] ました。{FileInfo, nil, 0}

ありません{ FileInfo, _, 0 }

この2つのシーンの違いは何ですか?

4

1 に答える 1