I see, not too fond of how much boilerplate is required for each constant, but perhpas this is the only way to get them in guards?
On Sunday, May 22, 2016 at 12:35:24 PM UTC+2, max s wrote: > > Hi, > > I use macros for such requirement in my own code: > > defmodule Constants do > defmacro val1 do > quote do > "val1" > end > end > > defmacro val2 do > quote do > "val2" > end > endend > > > And here's how it's used: > > > defmodule Test do > require Constants > > def match v do case v do > Constants.val1 -> "matched val1" > Constants.val2 -> "matched val2" > _ -> "no match" > end > endend > > > Max > > > On 22 May 2016 at 12:16, Nytz12 <[email protected] <javascript:>> > 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] <javascript:>. >> 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/d11f1487-1151-4c40-b9e3-b63d3deb67c0%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
