我见过的大多数书籍或在线资源都使用记录来保持一个过程的状态(可能因为这是多于(?)十年的方式).另一方面,map有效地用于替换stdlib中的元组(例如,supervisor模块中的childspecs).
作为一个例子,我正在通过Learn You Some Erlang的有限状态机章节工作,state记录可以替换为在init/1需要的回调中声明的映射gen_fsm.
.hrl文件使得跟踪错误变得更加困难.此外,它会更有效吗?
我知道一个经过深思熟虑的基准测试可以回答我的问题,但我只用了几个星期就学习了Erlang,而地图 模块相当新,而且还在变化.
更新:感谢我给出了可怕的建议,我更彻底地阅读了地图上的LYSE章节,答案很明确:
使用记录的优点是密钥在编译时是已知的,这带来了优势
- 快速访问特定值(比动态更快)
- 额外的安全(早期崩溃而不是腐败状态)
- 更容易检查类型
这些记录绝对适合进程的内部状态,尽管偶尔会编写更冗长的code_change函数.
另一方面,Erlang用户将使用记录来表示复杂的嵌套键/值数据结构(奇怪地类似于面向对象语言中的对象),这些数据结构经常跨越模块边界,因此地图将有很大帮助.记录是该工作的错误工具.
即使在阅读了 Nix 手册之后,仍然对 Nix 表达式的真正含义感到困惑。有时它们被称为派生,但存储派生也有其他含义。
我是erlang的新手,并从Joe Armstrong的"Programming Erlang"开始教程.
我对8.6中选择性接收中提到的"保存队列"感到困惑.如果消息根本不匹配,为什么不直接删除它?将它放回邮箱以便以后处理的目的是什么?如果它是默认行为,那些垃圾消息(意味着它们无法匹配)可能会导致性能损失,因为它们会在不释放的情况下累积.
我想知道我是否误解了这一部分.我试图检查进程邮箱的内容以便更好地理解,但我无法做到.
请帮助,我将不胜感激任何证明有用的代码片段,谢谢.
我已经在谷歌云上安装了一个 PostgreSQL,我希望能够使用 pg-admin 从我的 PC 远程访问它。
当我尝试连接到我的实例时,我确实收到以下错误:
无法连接到服务器:
无法连接到服务器:连接被拒绝 (0x0000274D/10061) 服务器是否在主机“[我的 VM 实例的外部 IP]”上运行并接受端口 5432 上的 TCP/IP 连接?
我认为这可能是因为谷歌云防火墙阻止了我(也许!),我为我的实例指定了以下防火墙,我使用我的 IP 地址来定义源过滤器:

我是否错过了一些东西,因为我仍然无法访问它,有人可以帮助我吗?我已经不知道了,我已经检查了很多教程,并且我做了很多我应该解决的事情。有人知道吗?
从将Nix软件包管理器安装在非NixOS机器上之后,请向十岁的孩子解释一下。例如,我在Mac上,甚至没有~/.config目录。
我找到了以下(可能是)相关资源,但我无法将它们拼在一起:
在NixOS 18.03上使用带有Erlang 20.0的Elixir 1.5.1吗?
我在哪里beam.packages.erlang<rel>.elixir确切指定?
为此吗?
最后,我安装了带有Erlang 21的最新Elixir,如下所示,但是我确定这不是应该做的。
$ # Cloned the `nixpkgs` repo from github and started the repl
$ # in the same the directory.
$
$ nix repl
Welcome to Nix version 2.0.4. Type :? for help.
nix-repl> :l nixpkgs
Added 9182 variables.
nix-repl> pkgs.beam.packages.erlangR21.elixir
«derivation /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv»
nix-repl> :q
$ nix-store --realise /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv
Run Code Online (Sandbox Code Playgroud) 我想我在写出步骤时理解了函数应用程序的工作原理,但类型签名算术并没有在我的脑海中相加。对冗长的前奏表示歉意(没有双关语)。
\n举一个具体的例子,这个例子是Stefan H\xc3\xb6ck\ 的 Idris2 教程的一个稍微修改过的例子:
\nplusTwo : Integer -> Integer\nplusTwo = (+2)\n\ntwice : (Integer -> Integer) -> Integer -> Integer\ntwice f n = f (f n)\nRun Code Online (Sandbox Code Playgroud)\n在 REPL 中:
\n> twice plusTwo 3\n7\n\n> (twice . twice) plusTwo 3\n11\nRun Code Online (Sandbox Code Playgroud)\nHaskell 和 Idris 中的函数都是柯里化的,每个函数只接受一个参数
\n函数组合实现为
\nf . g = \\x -> f (g x)\nRun Code Online (Sandbox Code Playgroud)\n函数应用程序是左关联的
\n类型签名中的箭头是右关联的
\n …lambda 演算中的 Eta 抽象意味着跟随。
函数
f可以写成\x -> f x
实际用例将不胜感激。
为了有效处理数据,Neo4j表示他们以"无索引邻接"的方式搜索图形数据.但是,我知道AgensGraph使用PostgreSQL的"Btree"方式进行查询
与"无索引邻接"相比,使用PostgreSQL的"Btree"有什么好处?
例如,我已经有一段时间没有使用Haskell了,忘记了const函数的名称,但是记得它的类型签名是a -> b -> a。
找到一篇关于使用空提交启动存储库的文章。看了几遍帖子,还是不明白其中的道理:
\n\n\n1.
\ngit log和其他命令会出现可怕的错误消息。2. 您可以\xe2\x80\x99
\ngit reset回到初始状态。
根据上面前两节的标题,我怀疑这可能是一篇讽刺作品。
\n\n\n3. 您可以\xe2\x80\x99t 重新设置初始提交的基准。
\n
然而,这似乎是一个有效的观点(与链接文章《鲜为人知的 Git 命令》相呼应)呼应),但当我开始思考它时,我只是看不出这在实践中有何用处(或者什么)它试图阻止)。
\n原帖链接:(2008?)Git Magic - 附录\xc2\xa0A.\xc2\xa0Git 缺点:初始提交
\n我同意“从 0 开始计数”的观点,但除了迂腐之外,仍然不明白空的初始提交有什么好处。
\n原帖链接:(2010) 如何初始化我的 Git\xc2\xa0repositories | 凯文·德尔戴克
\n这篇文章确实给出了使用此技巧进行代码考古目的的基本原理(仍然不了解具体细节,但我知道这是针对特殊用例的)。
\n第 3 项和第 4 项中的链接显然已经过时,并且整个想法显然从未成功(?),但我仍然想知道它是否仍然有好处 - 或者从那时起 Git 的变化消除了它的必要性。
\n当然,在输入所有这些内容后,我找到了 SO 线程:
\nerlang ×3
haskell ×2
nix ×2
postgresql ×2
agens-graph ×1
b-tree ×1
elixir ×1
git ×1
idris ×1
neo4j ×1