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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to