6

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

例如,假设我的应用程序的各个部分都需要一个 RoleGroup(它被分解为 SBT 子项目)

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

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

4

1 回答 1

6

这是一个明智的做法。事实上,它被应用于 Scala 库本身。

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

于 2013-05-23T09:30:53.290 回答