2017-04-12 19 views
0

したがって、私は、slickのクエリを実行する共通の実行関数を持つために特性を実装したいと考えました。Slick Scalaメソッドはジェネリック型を推測します

以下のコードからわかるように、クラスに型パラメータを持つ1つの特性と、メソッドの型パラメータを定義する1つの特性があります。

私がコンパイルすると、ジェネリック型のメソッドの型は(型引数を与えずに)コンパイルされますが、他の型はコンパイルされません。

なぜですか?私はクラス型の引数UserTableまたはUser(私の滑らかなテーブルの定義と投影されたケースクラス)を与えようとしましたが、それらのどれも動作しません。エラーは「DBIO [UserTable]が実際にMySQLDriver.StreamingDriverActionを受け取る」と表示されます。

本当にありがとうございました。

ありがとうございました!!!

class DAO @Inject()(val configProvider: DatabaseConfigProvider) extends 
    ManagementAppDatabase { 
    private val users = TableQuery[UserTable] 

    def findUserByEmail(email: String): Future[Option[User]] = { 
    execute(users.filter(_.email === email).result.headOption) 
    } 
} 

trait ManagementAppDatabase { 
    val configProvider: DatabaseConfigProvider 
def execute[T](dBIO:DBIO[T]): Future[T] = configProvider.get[JdbcProfile].db.run(dBIO) 
} 

trait ManagementAppDatabase[T] { 
    val configProvider: DatabaseConfigProvider 
def execute (dBIO:DBIO[T]):Future[T]=configProvider.get[JdbcProfile].db.run(dBIO) 
} 

答えて

1

ManagementAppDatabase[User]の場合は、DBIO[User]にのみexecuteと電話することができます。しかしusers.filter(_.email === email).result.headOptionDBIO[Option[User]]です。それでおしまい。

+0

ああ、ありがとうございます。そして、ちょうどアドオンの質問でも私はそれを本当に感謝して答えることができる場合。では、この場合、Scalaは型引数をどのように推論しますか(私は具体的な型引数を与えなかったので)?そして/またはScalaが一般的にこのような型を推論する方法は? –

+0

この場合、 'execute'には最初に推論する型パラメータがありません。そして、2番目に答えることは質問に収まりません。 –

+0

ありがとうございます。私は別の質問を作成しました:(http://stackoverflow.com/questions/43381289/scala-method-inferred-generic-type)あなたが答えることができれば本当に感謝します! –

関連する問題