1

我想为 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

4

0 回答 0