了解 erlang ETS 匹配规范的行为

Posted

技术标签:

【中文标题】了解 erlang ETS 匹配规范的行为【英文标题】:Understanding the behavior of erlang ETS match specs 【发布时间】:2021-06-20 13:03:58 【问题描述】:

我正在尝试在 DETS 表上构建匹配规范,但遇到了令我困惑的事情。

表项的结构如下:

'RECORD_KEY','BODY_TUPLE'

“RECORD_KEY”术语看起来像这样 shell,T1,T2,T3,T4,T5,T6

如果我符合此规范:

' _','_','$1','_','_','_','$2' 

ie: dets:match(Ref, '_','_','$1','_','_','_','$2' )

我得到了表中的所有条目。 但是,现在我尝试在匹配规范中添加一些其他术语,以便可以开始添加如下守卫:

  Terms = ' _','_','$1','_','_','_','$2',
  Gaurds = [],
  Returns = ['$1'],
  Pattern = [Terms,Gaurds,Returns],
Matches = dets:match(Ref, Terms),

即使我将 '$1' 替换为 '$_',它也不会返回任何条目。

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

好吧,我觉得有点愚蠢,去年我实际上使用了很多 ETS 表,但我忘记了 ets:match 和 ets:select 是两个不同的函数。我应该使用 SELECT。

【讨论】:

以上是关于了解 erlang ETS 匹配规范的行为的主要内容,如果未能解决你的问题,请参考以下文章

如何在erlang中匹配子字符串忽略大小写

OpenHarmony - ArkUI(TS)开发之下拉选择菜单

从 ets 表中删除日期戳超过 10 秒的所有记录

使用连续 \d 和 \w 时了解正则表达式的行为 [重复]

了解 QDoubleValidator 范围的行为

Git URI 与 SSH URI 规范不匹配