Hi Yurko, please send a pull request that adds support for guards. :) In the documentation we should make it clear that only the matchspec variables $1, $2 and friends must be used. If you use $$ or $_ there is no guarantee the representation will be kept.
*José Valim* www.plataformatec.com.br Skype: jv.ptec Founder and Director of R&D On Fri, Feb 24, 2017 at 8:41 AM, Yurko Hoshko <[email protected]> wrote: > Hello everyone. > > There is a small proposal for improvement in Registry.match/3 . > At the moment it does not support ETS guard conditions, which could be > quite useful. > > Current behavior: > > @spec match(registry, key, match_pattern :: atom() | tuple()) :: [{pid, > term}] > def match(registry, key, pattern) when is_atom(registry) do > spec = [{{key, {:_, pattern}}, [], [{:element, 2, :"$_"}]}] > > ... > end > > > > > Second element of spec list is a list of guards which is empty and > non-changeable at the moment. > What we could do instead is allow passing additional guards for more > precise lookup. > > So it would be something like: > > @spec match(registry, key, match_pattern :: atom() | tuple(), guards :: > list()) :: [{pid, term}] > def match(registry, key, pattern, guards \\ []) when is_atom(registry) and > is_list(guards) do > spec = [{{key, {:_, pattern}}, guards, [{:element, 2, :"$_"}]}] > > ... > end > > > Example of guard list for checking if pattern variable is greater then 1: > [{:>, :"$1", 1}] > > It is a bit ugly syntax though - so it would be nice to hear if someone > has better ideas to do, as well as is this feature useful at all. > > Thanks :) > > P.S. Link to Registry.match/3 on GitHub: GitHub > <https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/registry.ex#L470-L487> > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/elixir-lang-core/ef366cd6-bb81-434b-8249- > 5948b0e735eb%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/ef366cd6-bb81-434b-8249-5948b0e735eb%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Lii6unzfY%3D62%3DPNmA6vAsZPq5TXv_nXXWG2-npADFPhw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
