gpt4 book ai didi

elixir - Elixir 记录中括号语法的使用

转载 作者:行者123 更新时间:2023-12-04 20:08:42 35 4
gpt4 key购买 nike

我正在使用 elixir lang getting started 学习 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 shell 时:
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 } .

这两个场景有什么区别?

最佳答案

很好的问题!

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

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

iex> _
** (CompileError) iex:1: unbound variable _

在这种情况下,Elixir 将非给定值扩展为默认值。

关于elixir - Elixir 记录中括号语法的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723311/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com