簡體   English   中英

未指定的值參數rconv

[英]Unspecified value parameter 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,Long)

由於queryNAT上具有GetResult約束,因此您的函數必須具有相同的約束。 您需要告訴您的通用方法,該方法僅對定義了GetResult T類型有效,因此:

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

或等效地:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM