@Onorio

You're right, we should not take assumptions before benchmarking even
though I think my intuition was justified. I wrote a quick code that I
profiled with fprof and I get 3~4 better performances using the matching on
constants ; you can see the gist here
https://gist.github.com/anonymous/3cf62215407b829da4ab013d111cebfe (let me
know and correct me if there's a mistake in my profiling).

@José

Agreed and actually it'd be more in line with erlang philosophy of doing
things

Max

On 23 May 2016 at 17:45, José Valim <[email protected]> wrote:

> Why not use atoms? Atoms are precisely that: constants.
>
>
>
> *José Valim*
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
>
> On Sun, May 22, 2016 at 12:16 PM, Nytz12 <[email protected]> wrote:
>
>> Hi
>>
>> I use the following pattern to define cross module constants
>>
>> defmodule Visitor do
>>
>>   defmodule FilterTypes do
>>     def c_GREATER_THAN, do: "greater_than"
>>     def c_LESS_THAN,    do: "less_than"
>>     def c_IS,           do: "is"
>>     def c_IS_NOT,       do: "is_not"
>>   end
>>   ...
>>
>> Which lets me do something like this from other modules
>>
>> Visitor.FilterTypes.c_GREATER_THAN # == "greater than"
>>
>> Problem is that I just discored that these 'constants', which are really
>> function calls, cannot be used to do pattern match like:
>>
>> def filter(query, filter, field, value) do
>>     case filter do
>>       FilterTypes.c_GREATER_THAN -> greater_than(query, field, value)
>>       FilterTypes.c_LESS_THAN    -> less_than(query, field, value)
>>       FilterTypes.c_IS           -> is(query, field, value)
>>       FilterTypes.c_IS_NOT       -> is_not(query, field, value)
>>       _                          -> {:error, "unknown filter", filter}
>>     end
>>   end
>>
>> Is there a better approach i'm missing?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-talk" 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-talk/ace6b869-dfce-4d3f-aeeb-2d9bc4583f03%40googlegroups.com
>> <https://groups.google.com/d/msgid/elixir-lang-talk/ace6b869-dfce-4d3f-aeeb-2d9bc4583f03%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-talk" 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-talk/CAGnRm4KmHUN5PHYgoV4hT9tyOnN--o9ysuRoofi5V%2B%3DfJSth8Q%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-talk/CAGnRm4KmHUN5PHYgoV4hT9tyOnN--o9ysuRoofi5V%2B%3DfJSth8Q%40mail.gmail.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-talk" 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-talk/CAOPKHev-O0ZdDURxp144Xp4UrT-0FWECVYfNRwxyrg6HRkP0vQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to