3つのメソッドのうち共通のコードをリファクタリングする問題に遭遇しましたが、makeRequest()
にコンパイルされた暗黙の暗黙的な一致があります。私はこれが暗黙のメソッドまたは他のいくつかの問題のデフォルトを持っているかどうかはわかりませんが、私の目標はgetRequest/deleteRequest/postRequestは単にmakeRequest( "GET")/ makeRequest( "DELETE")/ makeRequest( "POST" )。以前のパラメータのどれもが暗黙の、私はちょうど使用して暗黙 デフォルト値を持つ複数の暗黙的なパラメータがあいまいな値を返す
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")
目立つ赤い旗の1つは、 'String'に'暗黙的 'が必要だということです。できるだけ一般的な型に対する暗黙的な定義を避けてください。つまり、あいまいな暗黙的な暗黙をデバッグするには、上記の方法のサイトを参照し、範囲内のすべてのimplicitsを見つけるので、あなたが私たちに提供した情報は十分ではありません。 – Alec
@Alec、私はこのコメントの後のポストでこれを明らかにするだろうが、以前はgetRequest/deleteRequest/postRequestに明示的なパラメータしかなかったので、私は各メソッドを単に呼び出すようにmakeRequestに3つのメソッドの共通コードをリファクタリングしようとしている。 makeRequest( "GET")。これを行うには、implicitsを使用しようとしています – irregular
Implicitsは名前ではなくタイプのみで検索するので、 'String'を使用すると期待どおりに動作しません。 – Reactormonk