3 가지 방법 중 공통 코드를 리팩토링하는 문제와 makeRequest()
으로 실행하고 있지만 컴파일러에서 모호한 암시 적 일치를 얻습니다. 이것은 암시 적 메서드 또는 다른 문제에 대한 기본값을 갖는 것이지 확실하지 않지만 내 목표는 getRequest/deleteRequest/postRequest는 단순히 makeRequest ("GET")/makeRequest ("DELETE")/makeRequest ("POST"). 이전 매개 변수 중 어떤 것도 암시, 난 그냥 사용 implicits 기본값이 모호한 여러 암시 적 매개 변수가 스칼라 값이됩니다.
def makeRequest(method: String)(implicit path: String, base: String, params: Seq[(String, String)], body: Option[String], retriesLeft: Int): Future[WSResponse] = ???
def getRequest()(implicit path: String, base: String = baseUrl, params: Seq[(String, String)] = Seq(), body: Option[String] = None, retriesLeft: Int = retries): Future[WSResponse] = makeRequest("GET")
def deleteRequest()(implicit path: String, base: String = baseUrl, params: Seq[(String, String)] = Seq(), body: Option[String] = None, retriesLeft: Int = retries): Future[WSResponse] = makeRequest("GET")
def postRequest[T]()(path: String, body: T, base: String = baseUrl, params: Seq[(String, String)] = Seq(), retriesLeft: Int = retries)
(implicit wrt: play.api.http.Writeable[T], ct : play.api.http.ContentTypeOf[T]): Future[WSResponse] = makeRequest("POST")
나는이 얻을
하여 목표에 도달하려고 시도하지 않고 같은거야 하였다는 deleteRequestambiguous implicit values:
[error] both value base of type String
[error] and value path of type String
[error] match expected type String
[error] def getRequest()(implicit path: String, base: String = baseUrl, params: Seq[(String, String)] = Seq(), body: Option[String] = None, retriesLeft: Int = retries): Future[WSResponse] = makeRequest("GET")
눈부신 적색 플래그 중 하나는'String'에'암시 적 '이 필요하다는 것입니다 - 가능한 한 많이 일반적인 유형에 대한 암시를 정의하지 말아야합니다 ...하지만 모호한 implicits를 디버깅하려면 호출을 봐야합니다 범위의 모든 함축을 찾으십시오. 그래서 우리가 제공 한 정보가 충분하지 않습니다. – Alec
@Alec, 나는이 주석 다음 게시물에서 이것을 명확히 할 것이다. 그러나 이전에 getRequest/deleteRequest/postRequest는 명시적인 매개 변수만을 가졌으므로 각 메소드를 간단하게 호출 할 수 있도록 makeRequest에있는 3 개의 메소드의 공통 코드를 리펙토링하려고 시도하고있다. makeRequest ("GET").이렇게하려면 implicits를 사용하려고 시도합니다. – irregular
Implicits는 이름이 아닌 유형별로만 검색하므로'String '을 사용하면 예상대로 작동하지 않습니다. – Reactormonk