2

私は遊びを持っています!2つのアプリケーションとモデル間で再利用されるいくつかの機能。models次の例のように、パッケージオブジェクト内に配置することを考えました

import java.util.Date

package object models {
  case class RichDate(d: Date) {
    def timestamp: Long = d.getTime / 1000
  }

  implicit def enrich(d: Date): RichDate = new RichDate(d)
}

モデルのどこにでも日付フィールドがあるので、書くことができますmyDate.timestamp。ù

これはコンパイルされ、単体テストでも機能します。ただし、何らかの理由で、実際のアプリケーションを実行すると、実行例外が発生します。[NoSuchMethodError: models.package$.enrich(Ljava/util/Date;)Lmodels/package$RichDate;]

上記がPlayで機能しない理由はありますか?アプリケーション、有効なScalaでありながら?

4

1 に答える 1

3

私もこれに遭遇しましたが、奇妙な動作はpackage object models フレームワークですでに定義されていることが原因であることがわかりました。これにより、基本的package object modelsにフレームワークのユーザーが立ち入り禁止になります。私の解決策は、ライブラリのポン引きをユーティリティオブジェクト(utils.DateUtilsなど)に配置し、必要に応じてインポートすることでした。

于 2012-09-26T03:38:50.953 に答える