1
votes

Can you please have a look at my Macro? I am getting undefined function number/0 error, and I can't figure it out why.

 defmodule DbUtil do
        defmacro __using__(opts) do
            quote do
              import unquote(__MODULE__)
              @before_compile unquote(__MODULE__)
            end
        end

        defmacro __before_compile__(%{module: definition} = _env) do

            quote do
                import Ecto.Query

                def last do
                    from x in unquote(definition), order_by: [desc: x.id], limit: 1
                end

                # This dumps error
                def limits(number) do
                    from a in unquote(definition), limit: ^unquote(number)
                end
            end

        end
    end
1

1 Answers

2
votes

You don't need to unquote number. unquote is used when you want to inject a variable present outside the quote block. Since number is defined inside the quote, you don't need to unquote. The following should work for you:

def limits(number) do
  from a in unquote(definition), limit: ^number
end