我正在编写一个访问数据库的 Scala 应用程序。大多数时候,会有可用的连接,但有时不会。我想做的是如下所示:
object User {
def authenticate(username: String, password: String)
(implicit conn: Connection): Option[User] = {
// use conn to grab user from db and check that password matches
// return Some(user) if so, None if not
}
def authenticate(username: String, password: String): Option[User] = {
implicit val conn = DB.getConnection()
authenticate(username, password)
}
}
我希望发生的是,如果有Connection
可用的类型的隐式值,编译器将使用第一种方法。如果没有,它将使用第二个。不幸的是,我发现编译器并不那么聪明,或者,如果是的话,我并没有告诉它以正确的方式做什么。
所以,我的基本问题是,有没有一种方法可以编写一个需要隐式参数的方法,然后提供相同方法的重载版本,如果没有可用的隐式参数类型,该方法会创建一个可接受的值。
你可能会说,“你为什么要做这样的事情?如果你可以创建一个合适类型的可接受值,为什么不总是这样做呢?” 这基本上是正确的,除了如果我有一个开放的数据库连接,我宁愿继续使用它而不是创建一个新的连接。但是,如果我没有打开的数据库连接,我知道在哪里可以找到一个。
我的意思是,简单的答案是给这两种方法不同的名称,但我不应该这样做,gosh-darn-it。但也许我会...
谢谢!托德