我想为 Squeryl Record(Lift Web 框架)添加其他方法。该方法名为 validateTry。请参阅下面的代码
import scala.language.postfixOps
import scala.util._
import net.liftweb.record._
package object code {
implicit class RecordOps[T <: Record[T]](r: T) {
def validateTry(): Try[T] = {
r.validate match {
case Nil => Success(r)
case errs => Failure(new Exception("Error(s) during validation " + r.getClass() + ": " + errs.mkString(", ")))
}
}
}
}
它按预期工作。但我想扩展 AnyVal,像这样
implicit class RecordOps[T <: Record[T]](r: T) extends AnyVal {
因为在我看来它将是“正确的”(我认为它应该对性能产生影响)。但是在我添加了“扩展 AnyVal”之后,我收到了错误“值类需要恰好有一个公共 val 参数”。这是什么以及如何解决?(我真的需要修复吗?)
谢谢。
UPD。我在构造函数定义中添加了“val”,它开始工作。感谢 Vasya Novikov 给我的链接。正确的代码如下所示:
implicit class RecordOps[T <: Record[T]](val r: T) extends AnyVal {
它按预期工作。文档说它应该避免如我所见的类的实例化。链接是http://docs.scala-lang.org/overviews/core/value-classes.html