【发布时间】:2012-10-05 18:17:49
【问题描述】:
trait DAOContract[T <: Entity] {
// default create
def create(t: T): Option[Int]
}
trait UserContract extends DAOContract[User] {
// provide alternate create method for transactional blocks
def create(u: User)(implicit ss: Session): Either[String, Int]
...
}
// DAO provides create implementation with embedded session
class UserDAO(implicit val db: Connection)
extends DAO[User] with UserContract {
import db.Driver.Implicit._
import org.scalaquery.ql._
...
}
在控制器中
dao.create(model) // boom, no implicit session
我希望我在这里遗漏了一些东西:为什么 scala 编译器无法区分上面的 2 个创建方法签名?
基本上,如果不对事务性(即返回 Either)或独立的操作提出不同的方法命名约定,我就不可能重载 DAO 操作。
或者,我只是以错误的方式处理事情,完全有可能......
【问题讨论】:
-
您能否提供一段我们可以编译和使用的独立代码?
-
不是直接用所有的管道,而是试试这个代码sn-p,捕获问题:“pastebin.com/KvWA1hDv” 似乎隐式参数启用的方法需要不同的签名;换句话说,afaik,不可能超载,否则很高兴听到/看到解决方法
标签: scala overloading implicit