2016-10-12 4 views
0

Я имел эти строки в моем кодеНе выбрано значение параметра rconv

val x = database.withSession { implicit session => 
    StaticQuery.queryNA[Long](s"select id from .....") 
} 

val y = database.withSession { implicit session => 
    StaticQuery.queryNA[Long](s"select id1 from .....") 
} 

val z = database.withSession { implicit session => 
    StaticQuery.queryNA[(Long, Long)](s"select id1, id2 from .....") 
} 

Для того, чтобы минимизировать дублирование кода я изменил мой код

def genericExec[T](query: String) : List[T] = { 
    database.withSession { implicit session => 
    StaticQuery.queryNA[T](query).list 
    } 
} 

for { 
    x <- genericExec[Long](query1) 
    y <- genericExec[Long](query2) 
    z <- genericExec[(Long, Long)](query3) 
} {...} 

Конечно я получаю ошибку теперь, когда

Error:(16, 32) not enough arguments for method queryNA: (implicit rconv: scala.slick.jdbc.GetResult[T])scala.slick.jdbc.StaticQuery[Unit,T]. 
Unspecified value parameter rconv. 
     StaticQuery.queryNA[T](query).list 

Поскольку тип T является полностью общим, для меня невозможно обеспечить все типы преобразований. Так как я могу сохранить свою родовую реализацию и просто обеспечить преобразования, которые мой тип T на самом деле, используя в своем коде (он же долго, и (Long, Long)

ответ

0

Поскольку queryNA имеет GetResult ограничение на T, ваша функция должна . имеют те же ограничения, Вам необходимо сообщить своему универсальный метод, что он действителен только для типов T, которые имеют GetResult определены, так:

def genericExec[T : GetResult](query: String) : List[T] = ... 

или что то же самое:

def genericExec[T](query: String)(implicit rconv: GetResult[T]) : List[T] = ... 
Смежные вопросы