Scala 封装对象并 Play ! 2

标签 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;]

Is there a reason why the above should not work in a Play! application, while being valid Scala?

最佳答案

我也遇到过这个问题,结果发现这种奇怪的行为是由于包对象模型 already being defined in the framework 。这基本上使得框架用户无法使用包对象模型。我的解决方案是将我的库放入实用程序对象(例如 utils.DateUtils)中,然后在适当的时候导入它们。

关于Scala 封装对象并 Play ! 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586384/

相关文章:

scala - 片段可以在提升中接受参数吗?

scala - 部署没有依赖项的 Scala 二进制文件

java - scala 对象单例中的方法不是静态的?

Python 认为我的 setup.py 创建的包是一个模块而不是 python 包

R CMD 检查 : no visible binding for global variable ‘mypkgdata’

testing - 如何对项目中除 vendor 包之外的所有测试文件运行 go test

scala - parallelsim下scala并发类和非并发类的区别

java - 在 Spring Boot 中使用 SimpleThreadScope 我在同一线程中获得一个对象的两个实例

javascript - if 语句的函数作用域

c++ - 在多个 Cpp 文件中使用一个变量