2017-03-01 8 views
1

와 함께 작동 나는 내가 할 수있는 다음 코드스칼라 DSL은 괄호

type RequestWithParams[T] = (ApiRequest[T], Map[String, String]) 

implicit class RequestWithParamsWrapper[T](request: ApiRequest[T]) { 
    def ? (params: Map[String, String]) : RequestWithParams[T] = (request, params) 
} 

type RequestWithBody[T] = (ApiPostRequest[T], ApiModel) 

implicit class RequestWithBodyWrapper[T](request: ApiPostRequest[T]) { 
    def < (body: ApiModel) : RequestWithBody[T] = (request, body) 
} 

에게이

val response = getReleasesUsingGET ? Map[String, String]("a" -> "b") 
val response2 = createReleaseUsingPOST < ReleasePostRequest(Some("artifactId"), Some("groupId"), None, Some("1.0.1")) 

가 지금은 PARAMS과 몸을 결합하려는이. 나는이

val response3 = (createReleaseUsingPOST < ReleasePostRequest(Some("artifactId"), Some("groupId"), None, Some("1.0.1"))) ? Map[String, String]("a" -> "b") 

작동 쓰기하지만이를 작성하는 경우가

val response3 = createReleaseUsingPOST < ReleasePostRequest(Some("artifactId"), Some("groupId"), None, Some("1.0.1")) ? Map[String, String]("a" -> "b") 

Error value ? is not a member of ReleasePostRequest 

작동하지 않는 경우이 괄호없이 DSL을 사용하는 방법이 있나요 내 코드

type RequestWithParamsAndBody[T] = (RequestWithBody[T], Map[String, String]) 

implicit class RequestWithParamsAndBodyWrapper[T: TypeTag](request: RequestWithBody[T]) { 
    def ?(params: Map[String, String]) : RequestWithParamsAndBody[T] = (request, params) 
} 

입니다 ? 미리 감사드립니다.

답변

1

설명대로 here, ?<보다 우선합니다. ?는 "기타 모든 특수 문자"범주에 속합니다. 따라서 괄호를 사용하거나 다른 연산자를 사용할 수 있습니다. 예를 들어 |?<보다 낮은 우선 순위를 가지고, 그래서

createReleaseUsingPOST < ReleasePostRequest(Some("artifactId"), Some("groupId"), None, Some("1.0.1")) |? Map[String, String]("a" -> "b") 

당신이 원하는 방법을 작동합니다.

+0

완벽하게 작동합니다. 고맙습니다 –