【问题标题】:Scala package objects with trait providing type/value aliases具有提供类型/值别名的特性的 Scala 封装对象
【发布时间】:2013-05-18 13:37:00
【问题描述】:

在 Scala 中给对象取别名的“正确”方法是什么?

例如,假设我在应用程序的各个部分(分为 SBT 子项目)中需要一个范围内的 RoleGroup

trait RoleGroup
object RoleGroup {
  case object ADMIN     extends RoleGroup
  case object MEMBER    extends RoleGroup
  case object PUBLIC    extends RoleGroup
}

由于我不想重复导入 RoleGroup,我决定将 RoleGroup trait 和 object 别名为 type 和 val 对应项,如下所示:

package com.developer
package controller

trait ControllerBase {
  type RoleGroup    = controller.RoleGroup
  val RoleGroup     = controller.RoleGroup
  ...
}

然后子项目包对象可以扩展辅助特征以免费获取导入:

package com.client

package object member
  extends com.developer.controller.ControllerBase

我对需要在范围内的其他案例对象做同样的事情。这是一个明智的解决方案吗?即我需要注意哪些缺点/问题?一切都编译好了,浏览器测试页面看起来就像在重构前的应用程序中一样运行,但不确定这是否是最好的方法。

【问题讨论】:

    标签: scala object package type-alias


    【解决方案1】:

    这是一种明智的做法。事实上it's being applied in the Scala library 本身。

    只有两个可以想象的成员级别需要别名:类型(即特征和类)和值(即对象、包和值)。你把它们都覆盖了。

    【讨论】:

    • +1,有趣的是,那必须是别名配方然后;-) 特征/类的类型和对象的 vals 等。使用这种方法绝对可以减少大量导入样板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多