我有下面的代碼,這是導致編譯錯誤,因爲編譯器(2.10.3)是無法找到一個方法調用的隱含參數:很難與Scala的隱含參數分辨率
package (...).construcao.light
import scala.slick.jdbc.{ GetResult, StaticQuery => Q }
import scala.slick.session.Session
import (...).rede.Rede
import (...).rede.TipoVista._
import (...).rede.construcao.SQLConnectionFactory
import (...).rede.construcao.SQLLoader
import (...).rede.construcao.SQLReader
import (...).rede.entidade.Bloco
import (...).rede.entidade.EstadoAbertura.estado
class BlocoSQLLoader(deps: {
val fabricaConexoes: SQLConnectionFactory
val leitorSQL: SQLReader
}) extends SQLLoader {
import BlocoSQLLoader._
def carregar(subestacao: String, alimentador: String, vista: TipoVista, rede: Rede) {
}
def pesquisarBlocos(subestacao: String, alimentador: String, vista: TipoVista) = {
deps.fabricaConexoes.conexao(vista) withSession { implicit sessao: Session =>
val b = Q.query[(String, String), Bloco](deps.leitorSQL("rede.blocosAlimentador"))
b(subestacao, alimentador).list
}
}
}
object BlocoSQLLoader {
import scala.language.implicitConversions
implicit val getResultadoBloco = GetResult(r => new Bloco(
idEquipamento = r.<<, pelFonte = r.<<, pelCarga = r.<<, idBlocoFonte = r.<<, idBlocoCarga = r.<<,
refAlimentador = r.<<, refAlimentadorOrigem = r.<<, nome = r.<<, seccionamento = estado(r.<<),
estado = estado(r.<<), cor = r.<<)
)
}
的因爲沒有找到implicit val getResultadoBloco
(在object BlocoSQLLoader
),所以行val b = Q.query[(String, String), Bloco](deps.leitorSQL("rede.blocosAlimentador"))
暫停編譯。我認爲編譯器試圖在類伴侶對象上找到隱式參數。我在這裏做錯了什麼?
謝謝!
你嘗試明確地傳遞getResultadoBloco在第二個參數列表Q.query? – cvogt
如果您有錯誤消息,請提供錯誤消息。這是有原因的。 –
@cvogt是的,它在我將該調用顯式化並且在將隱式聲明放在類中時起作用。 –