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]> 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/CAOPKHevwnnNUxEXz1Lkz-RC05z%2BAe%2B0RZLhJS0JBrkx5E4bf%2Bw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to