2017-04-12 161 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

这不是猜测,编译器可以推断在这种情况下,传递给方法的对象类型都有定义的类型:

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

所以,如果你传递一个类型DBIO[Int],编译器剩下的就可以填写了:

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

我明白了!谢谢 ! –