2017-11-14 6 views
1

내 매크로 좀 봐 주시겠습니까? undefined function number/0 오류가 발생하며 그 이유를 알 수 없습니다.엘릭서 매크로 따옴표 붙이지 않고

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 

답변

2

당신은 unquotenumber 할 필요가 없습니다. 은 quote 블록 외부에있는 변수를 삽입 할 때 사용됩니다. numberquote에 정의되어 있으므로 unquote은 필요하지 않습니다. 다음은 당신을 위해 일해야합니다 :

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

대단히 고마워요. 내가 어떻게 그것을 놓쳤는 지 잘 모르겠다. 건배 –