私は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つのシーンの違いは何ですか?