Scala包对象和Play! 2

时间:2012-09-25 15:37:43

标签: scala scope package playframework-2.0

我玩了! 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?

1 个答案:

答案 0 :(得分:3)

我也遇到了这个问题,结果发现奇怪的行为是package object models already being defined in the framework造成的。这基本上使package object models禁止框架的用户。我的解决方案是将我的库pimping放在实用程序对象(例如utils.DateUtils)中,并在适当的时候导入它们。