Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 方括号语法在长生不老药记录中的应用_Elixir - Fatal编程技术网

Elixir 方括号语法在长生不老药记录中的应用

Elixir 方括号语法在长生不老药记录中的应用,elixir,Elixir,我正在学习Elixir编程,并且我正在学习记录括号语法 以下是示例: defrecord FileInfo, atime: nil, accesses: 0 defmodule FileAccess do def was_accessed?(FileInfo[accesses: 0]), do: false def was_accessed?(FileInfo[]), do: true end P>作者认为,在编译时,ILIXIR将记录扩展为元组。所以 def

我正在学习Elixir编程,并且我正在学习
记录括号语法

以下是示例:

defrecord FileInfo, atime: nil, accesses: 0
defmodule FileAccess do
  def was_accessed?(FileInfo[accesses: 0]), do: false
  def was_accessed?(FileInfo[]),            do: true
end
<> P>作者认为,在编译时,ILIXIR将记录扩展为元组。所以

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

def was_accessed?({ FileInfo, _, 0 }), do: false
但当我输入长生不老药外壳时:

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,{u0}

这两个场景有什么不同?

问得好

区别在于上下文。在第一个示例中,Elixir知道在函数签名(特别是在匹配上下文中)中调用了
FileInfo[]
,因此,它不使用默认值,而是将所有非给定值扩展为

在另一个示例中,我们不在匹配上下文中,它只是常规上下文。在这种情况下,
\uu
甚至是无效的:

iex> _
** (CompileError) iex:1: unbound variable _
在这种情况下,Elixir将非给定值扩展为默认值