我有以下代码,导致编译错误,因为编译器(2.10.3)无法找到方法调用的隐式参数:
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.<<)
)
}
第val b = Q.query[(String, String), Bloco](deps.leitorSQL("rede.blocosAlimentador"))
行打破了编译,因为找不到implicit val getResultadoBloco
(在object BlocoSQLLoader
上)。我认为编译器试图在类伴随对象上找到隐式参数。我在这里做错了什么?
谢谢!
答案 0 :(得分:1)
前向隐式引用必须具有显式类型。因此,要么在类声明之前移动object BlocoSQLLoader
,要么将隐式声明更改为
implicit val getResultadoBloco: WhateverThisTypeIsSupposedToBe = ...