2017-04-12 14 views
0

私は、この単純なScala特性を、指定された型パラメータを必要とするメソッドで持っています。Scalaのメソッド推論ジェネリック型

DAOクラスは特性を拡張し、特性のメソッドを使用します。メソッドに具体的な型を指定しなくても、コードはコンパイルされますが、これはScalaがジェネリック型を自動的に推測することによって達成されると思います(型の値を推測する必要があります)。そうですか?

また、一般的にこのような状況でScalaが推論する方法は?

ありがとうございます!

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) 
} 

答えて

0

メソッドに渡されたオブジェクトのタイプ定義されているとしてそれは推測ではありません、コンパイラはこのケースで型を推論することができます:あなたがタイプDBIO[Int]を渡すのであれば

def execute[T](dBIO:DBIO[T]): Future[T] = configProvider.get[JdbcProfile].db.run(dBIO) 

を、コンパイラ残りを記入することができます:

def execute[Int](dBIO:DBIO[Int]): Future[Int] = configProvider.get[JdbcProfile].db.run(dBIO) 
+0

私は見る!ありがとう! –