ETS tuple in body
Roberto Ostinelli
ostinelli@REDACTED
Fri Jan 10 17:17:58 CET 2020
Thank you Jacob,
I already tried a couple of combinations with const but I always got an
error message. For instance:
(r@REDACTED)2> Name = test.
test
(r@REDACTED)3> ets:select(my_table, [{
(r@REDACTED)3> {Name, '$2', '$3', '$4', '_', '_'},
(r@REDACTED)3> [],
(r@REDACTED)3> [{{const, Name}, '$2', '$3', '$4'}]
(r@REDACTED)3> }]).
** exception error: bad argument
in function ets:select/2
called as ets:select(my_table,
[{{test,'$2','$3','$4','_','_'},
[],
[{{const,test},'$2','$3','$4'}]}])
On Fri, Jan 10, 2020 at 5:05 PM Jacob <jacob01@REDACTED> wrote:
> Hi,
>
> On 1/10/20 4:37 PM, Roberto Ostinelli wrote:
> > MatchBody = case is_tuple(Name) of
> > true -> {{{Name}, '$2', '$3', '$4'}};
> > _ -> {{Name, '$2', '$3', '$4'}}
> > end,
> > case ets:select(my_table, [{
> > {Name, '$2', '$3', '$4', '_', '_'},
> > [],
> > [MatchBody]
> > }])
> >
> > I need to do this because to make it work for Name values of both test
> > and {test}.
> > Is there a better way?
>
> yes, by using a 'const' expression that will prevent variable substition
> and function (tuple) evaluation in the sub-expression (here Name):
>
> case ets:select(my_table, [{
> {Name, '$2', '$3', '$4', '_', '_'},
> [],
> [{{const, Name}, '$2', '$3', '$4'}]
> }])
>
> I assume there aren't nested tuples in Name, but just using {Name} like
> above would only prevent the outmost tuple from being interpreted as a
> "function" or variable. The 'const' expression is much safer here, since
> it just says: "include as is". See the ms_transform manpage for details.
>
> Jacob
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200110/442975cc/attachment.htm>
More information about the erlang-questions
mailing list