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

我明白了!謝謝 ! –