gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:00:28 24 4
gpt4 key购买 nike

在 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
...
}

然后子项目包对象可以扩展 helper trait 以免费获取导入:
package com.client

package object member
extends com.developer.controller.ControllerBase

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

最佳答案

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

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

关于具有提供类型/值别名的特征的 Scala 包对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16709767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com