【发布时间】:2014-05-31 22:15:51
【问题描述】:
今天在尝试向 Either 添加隐式方法时遇到了一个非常奇怪的问题。
implicit class EitherProvidesRollback[String,B](e: Either[String,B]) {
def rollback(
ss: Option[Session], overrideMsg: Option[String]): Either[String,B] = {
e.fold(
msg=> {
ss.map(_.rollback)
// found String required java.lang.String, FTW
// Left(i18n(overrideMsg.getOrElse(msg)))
// behold, the horrible hack
Left(i18n(overrideMsg.getOrElse(msg).toString).asInstanceOf[String])
},
Right(_)
)
}
}
i18n 方法接受一个字符串,AFAICT 正是它所得到的。解决方法,如per this thread,是隐式类的类型签名中的T <: String。出现Predef might be at play here。
有没有一种方法可以在不进行可怕的运行时强制转换的情况下使其正常工作,同时将类型签名完全保留为 String?
谢谢
【问题讨论】:
标签: scala type-signature predef