データベースにアクセスする 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
使用可能な型の暗黙的な値がある場合、コンパイラは最初の方法を使用するということです。そうでない場合は、2 番目を使用します。残念ながら、私はコンパイラがそれほど賢くはないことを発見しました。
したがって、私の基本的な質問は、暗黙の引数を期待するメソッドを作成し、利用可能なものがない場合に暗黙のパラメーターの型の許容値を作成する同じメソッドのオーバーロードされたバージョンを提供する方法があるかどうかです。
あなたは、「どうしてそんなことをしたいの? 適切な型の受け入れ可能な値を作成できるのなら、どうしていつもそうしないの?」と言うかもしれません。開いているデータベース接続がある場合は、新しい接続を作成するよりも先に進んでそれを使用したいという点を除けば、それはほとんど真実です。ただし、開いているデータベース接続がない場合は、接続先を知っています。
つまり、簡単な答えは、2 つのメソッドに異なる名前を付けることですが、そうする必要はありません。しかし、多分私は...
ありがとう!トッド