2014-08-28 4 views
1

매크로 확장 방법을 포장하는 매크로 확장나는 플레이 JSON을 포장하려고

def encoder[T] = Json.writes[T]

를 기록하지만 그건 컴파일되지 않습니다 그래서 T가, 알 수없는, 그것은

no unapply method found

불평

Json.writes[T]JsMacroImpl.reads 확장으로 바꿀 수 있다는 것을 알고 있습니다. 더 좋은 방법이 있나요?

답변

2

나는 시간이 오래 전에 비슷한 문제에 직면했다. 너는 이렇게 할 수있다.

개체를 만들고 내부 쓰기 인코더 메서드를 매크로 메서드로 만듭니다.

object SomeObj { 
    def encoder[T] = macro encoderRedirect_impl[T] 

    def encoderRedirect_impl[T : c.WeekTypeTag](c:Context) = { 
    q"Json.writes[${c.weakTypeOf[T]}]" 
    } 
} 

내 이해를 돕기 위해 매크로 리디렉션입니다. 하지만이 코드를 별도의 프로젝트에 작성하고이를 프로젝트에 대한 종속성으로 사용해야합니다.

+0

스칼라로 컴파일하지 않습니다. 2.11 – jilen

+0

@tiran은 weakTypeOf 일 가능성이 높습니다. 코드를 수정했습니다. –

+0

@EugeneBurmako 'weekTypeOf'가 "specialty menu"에 더할 나위없이 좋을지라도 –