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