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 {

私が見るように、それは「正しい」ものになるからです(私が見るように、パフォーマンスに影響を与えるはずです)。しかし、「extends AnyVal」を追加した後、「value class needs to have just one public val parameter」というエラーを受け取りました。これは何ですか?また、どのように修正しますか? (そして、私は本当に修正する必要がありますか?)

ありがとう。

アップデート。コンストラクター定義に「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