Scala包含提供类型/值别名特征的对象

什么是在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

我正在为其他需要在范围内的案例对象做同样的事情。 这是一个明智的解决方案吗? 即是否有任何我需要注意的缺点/问题? 所有编译和浏览器测试页面都像预重构应用程序一样运行,但我不确定这是否是最佳方法。


这是一个明智的做法。 实际上它正在Scala库本身中应用。

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

链接地址: http://www.djcxy.com/p/82693.html

上一篇: Scala package objects with trait providing type/value aliases

下一篇: Combinatorial Subtyping (in Scala)