gpt4 book ai didi

scala案例对象污染

转载 作者:行者123 更新时间:2023-12-01 18:10:31 25 4
gpt4 key购买 nike

让我解释一下;-)

下面的两个类都在 com.company.foo 包中

RoleGroup.scala
abstract class RoleGroup
case object ADMIN extends RoleGroup
case object MEMBER extends RoleGroup

MailSender.scala
abstract class MailSender
case object ADMIN extends MailSender
case object STAFF extends MailSender
case object ACCOUNTANT extends MailSender

这里的问题是 ADMIN 不明确,因为与 case 对象没有命名空间分离。似乎每个包只能有一个唯一命名的 case 对象。

我想我可以根据 mailADMIN、roleADMIN 等函数来命名案例对象。或者我应该创建适当的枚举并忘记案例对象?或者采取其他方法?

最佳答案

你可以这样做:

object RoleGroup {
sealed trait RoleGroup
case object ADMIN extends RoleGroup
case object MEMBER extends Rolegroup
}

MailSender 也类似。然后,在您只使用其中一个的情况下,您可以import MailSender._,反之亦然,但是当同时使用两者时,您将它们称为RoleGroup.ADMIN,等等.

您是否想采用这种方法或使用枚举主要取决于您打算如何使用它们。在这种方法中,每个“枚举”都是一个类型,而对于枚举,每个枚举都是一个值。前者更适合模式匹配,因为编译器可以检查您的匹配是否详尽,后者更适合序列化(IMO)。

关于scala案例对象污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460605/

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