Erlang/ets:在收到“错误的参数”后重置 ets 表?

2023-11-21

我一直在学习如何使用 ets,但困扰我的一件事是,偶尔*,ets:match抛出一个bad argument…并且,从他们开始,所有后续调用(甚至以前有效的调用)也会抛出bad argument:



> ets:match(Tid, { [$r | '$1'] }, 1).
% this match works...
% Then, at some point, this comes up:
** exception error: bad argument
     in function  ets:match/3
        called as ets:match(24589,{[114|'$1']},1)
% And from then on, matches stop working:
> ets:match(Tid, { [$r | '$1'] }, 1).
** exception error: bad argument
     in function  ets:match/3
        called as ets:match(24589,{[114|'$1']},1)
  

有什么办法可以“重置”ets系统以便我可以再次查询它(即从外壳)?

*:我无法重现这个问题……但是当我尝试做“其他事情”时,这种情况经常发生。


虽然我不是100%确定,这个线程似乎回答了你的问题。您似乎正在 shell 中观察到这种行为。如果是这样,那么两个事实正在以一种令人困惑的方式相互作用:

  1. 一旦 ets 表所属的进程终止,它就会被删除。
  2. 当 erlang shell 收到异常时,它就会终止并以静默方式重新启动。

因此,当您收到第一个异常时,当前 shell 进程会终止,导致 ets 表被删除,然后会为您启动一个新的 shell 进程。现在,当你尝试另一个ets:match,它失败,因为该表不再存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Erlang/ets:在收到“错误的参数”后重置 ets 表? 的相关文章

  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • 加密 (cryptojs) - 解密 (erlang)

    我有一个使用 cryptoJS AES 加密的值 需要使用 Erlang 加密库进行解密 对我来说问题在于能够在 Erlang 中使用解密aes cbc 128 decrypt Key IVec Cipher 我想 我需要知道使用的 IVe
  • Erlang 中的二进制和位串有什么区别?

    在 Erlang shell 中 我可以执行以下操作 A 300 300 lt
  • Erlang TCP 套接字关闭

    为了学习 Erlang 我正在尝试实现一个基于gen tcp 不幸的是 我的代码似乎触发了一些有线行为 为了演示这个问题 我附上了我的实现的最小化版本 它足以重现该问题 无论 HTTP 请求是什么 它都只是传递静态 200 OK 当我尝试运
  • Erlang停止gen_server

    我有 gen server start UserName gt case gen server start global UserName player of ok gt io format Player UserName started
  • 如何返回元素的个数?

    我必须编写一个函数 它接受一个整数列表作为参数并返回列表中小于 1 的整数的数量 到目前为止 我所拥有的是一个仅返回列表中的整数个数的函数 我不确定应该在哪里 是否放置 if 语句和计数器以仅返回有多少个整数小于 1 export num
  • 与共享数据相比,消息传递的性能损失

    最近有很多关于不使用锁和使用 Erlang 等消息传递方法的讨论 或者关于使用不可变的数据结构 例如函数式编程与 C Java 中的比较 但我关心的是以下几点 AFAIK Erlang 不保证消息传递 消息可能会丢失 如果还要担心消息丢失
  • Erlang - 导入 GPG 公钥

    我正在尝试在 Erlang 中做一些与公钥相关的事情 它们要求我跟踪公钥 根据这一页 http www erlang org doc apps public key using public key html id61611 我应该能够通过
  • 我们如何有效地处理 mnesia 记录的时间相关约束?

    我正在将记录写入mnesia 该记录应该保存在那里 仅在允许的时间 24 小时 内 24小时后 在用户修改其中的一部分之前 系统应该自动删除它们 例如 用户获得免费通话时间 用于语音通话 他们应该在给定时间内使用它们 如果他们不使用它 24
  • 如何修改erlang中的记录?

    我需要修改操作记录中的值 place 和 other place op action walk from place to other place preconds at place me on floor me other place p
  • Mnesia:如何同时锁定多行,以便我可以写入/读取一组“一致”的记录

    我多么希望我一开始就能表达我的问题 取一个包含 26 个键 a z 的表 并让它们具有整数值 创建一个流程 哎哟 一遍又一遍地做两件事 在一笔交易中 写入随机值a b and c使得这些值always总和为 10 在另一个事务中 读取值a
  • Erlang get_tcp:recv数据长度

    I user gen tcp recv Socket 0 用于数据接收 但我只能接收1次1418字节 我怎样才能收到发送的数据量 in gen tcp recv Socket 0 您正在询问内核 给我接收缓冲区中现在可用的所有数据 不过 内
  • 如何将列表转换为元组列表?

    我想转换 z z a z z a a z to z 2 a 1 z 2 a 2 z 1 我该怎么做 所以 我需要累积以前的值 它的计数器和元组列表 我已创建记录 record acc previous counter tuples 重新定义
  • Erlang 应该如何处理通用数据?

    假设我正在使用 Erlang 构建游戏服务器 每个用户检查某些内容 例如找到最近的玩家 是很常见的 因此通常有一个管理器类 在上面的例子中 我们使用互斥锁 据我所知 Erlang 通常会为每个 TCP 连接 用户会话 创建新的 Erlang
  • 在 Erlang shell 中加载项目 Rebar 依赖项的简单方法

    我有一个使用 Rebar 作为构建工具的项目 开发时 我希望 Rebar config 中指定的所有应用程序依赖项都能尽可能轻松地编译并加载到 shell 中 我在 Emacs 中使用 Erlang shell 有什么快速方法可以做到这一点
  • 如何在 Erlang 中将整数列表连接到字符串?

    我有这个元组 如下所示 127 0 0 1 现在我想将该元组作为字符串传递 127 0 0 1 到外部库 地理 IP 库 将此元组转换为字符串的最佳方法是什么 您可以随时使用inet parse ntoa 1 1 gt inet parse
  • 在 Erlang 中实现图灵机

    我有一个小项目 与实现图灵机非常相似 我遇到的基本问题是保存当前配置 例如头部的位置和更多信息 对我来说特别重要的是保留头部位置以使其向前或向后移动 Erlang 解决这个问题的方法是什么 我是 Erlang 新手 但据我探索 OTP ge
  • Erlang 进程如何(如果有的话)映射到内核线程?

    Erlang 因能够支持许多轻量级进程而闻名 它之所以能做到这一点 是因为它们不是传统意义上的进程 甚至不是 P 线程中的线程 而是完全在用户空间中的线程 这很好 实际上很棒 那么 Erlang 线程如何在多核 多处理器环境中并行执行呢 当
  • Erlang Supervisor 重新启动与已关闭主机的连接的策略

    我使用 erlang 作为服务之间的桥梁 我想知道人们对处理断开的连接有什么建议 我正在从本地文件获取输入并将它们通过管道传输到 AMQP 可以想象 AMQP 代理可能会崩溃 对于这种情况 我想继续重试连接到 AMQP 服务器 但我不想将
  • 使用 Erlang 进行 https post 的简单示例

    我发现引用了一些使用 erlang 与 ssl 通过 rpc 和 http get 等的示例 但是我很难找到通过 erlang 将数据发布到 ssl 端点的示例 有人知道我缺少的一个简单例子吗 我想我明白了 我的论点是错误的 这就是我最终得

随机推荐