【问题标题】:object User extends Magic[User]().using("users") can not compiledobject User extends Magic[User]().using("users") 无法编译
【发布时间】:2011-06-21 14:03:51
【问题描述】:

使用 Anorm 时,我想为用户案例类使用不同的表名:

object User extends Magic[User]().using("users")

但我得到以下编译错误:

无法编译文件 /app/models/User.scala。引发的错误是:';'预期但“。”找到了。

对象用户扩展 MagicUser↓.using("users")

这是 Anorm 的错误吗?

【问题讨论】:

    标签: scala playframework anorm


    【解决方案1】:

    显然不是错误,您的代码不是有效的 scala。你可以这样做:

    lazy val User = new Magic[User].using("users")
    

    (约定将是小写的“用户”,大写,以便它等同于您的预期代码)

    object 是一个声明,而不是一个表达式。对象声明是

    object ObjectName extends Ancestor(ancestor_constructor_arguments) {
      // body: data, method and initialization code
    }
    

    大部分是可选的。

    您必须通过构造函数参数或对象主体中的初始化代码进行调整。

    当您没有向 Magic 类添加任何行为时,似乎也没有必要声明一个对象。

    【讨论】:

    • 也许 play scala 文档scala.playframework.org/documentation/scala-0.9.1/… 有错误。但是我的User对象应该是case类User的伴生对象,否则懒惰的val User一定要放在包对象里?还有更优雅的解决方案吗?
    • 如果你需要它是一个对象,你必须通过构造函数或初始化代码。使用返回一个新实例的方法,因此很可能 Magic 是不可变的,因此它可以在构造函数中完全初始化。我看了看(github.com/playframework/play-scala/blob/master/src/play/db/… 第 227 行)。实际上,它在构造函数中使用 tableName,并包含在一个选项中。所以你可以做 object User extends Magic[User](Some("users"))
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多