如何扩展 Scala 中现有的枚举对象?

发布于 2024-11-24 07:08:19 字数 367 浏览 0 评论 0原文

我想知道您是否可以扩展 Scala 中已有的枚举。例如:

object BasicAnimal extends Enumeration{
    type BasicAnimal = Value
    val Cat, Dog = Value   
}

可以这样扩展吗:

object FourLeggedAnimal extends BasicAnimal{
    type FourLeggedAnimal = Value
    val Dragon = Value
}

那么,FourLeggedAnimal 中的元素将是 Cat、Dog 和 Dragon。这可以做到吗?

I'm wondering if you can extend already existing enumerations in Scala. For example:

object BasicAnimal extends Enumeration{
    type BasicAnimal = Value
    val Cat, Dog = Value   
}

Can this be extended something like this:

object FourLeggedAnimal extends BasicAnimal{
    type FourLeggedAnimal = Value
    val Dragon = Value
}

Then, the elements in FourLeggedAnimal would be Cat, Dog and Dragon. Can this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最近可好 2024-12-01 07:08:19

不,你不能这样做。 extends 之后的标识符 BasicAnimal 不是类型,而是值,因此不幸的是,它不起作用。

No, you cannot do this. The identifier BasicAnimal after extends is not a type, it is a value, so it won't work, unfortunately.

纵性 2024-12-01 07:08:19

可能就是这样:

object E1 extends Enumeration {
    type E1 = Value
    val A, B, C = Value
}
class ExtEnum(srcEnum: Enumeration) extends Enumeration {
    srcEnum.values.foreach(v => Value(v.id, v.toString))
}
object E2 extends ExtEnum(E1) {
    type E2 = Value
    val D, E = Value
}
println(E2.values) // prints > E2.ValueSet(A, B, C, D, E)

备注:不可能按名称使用 E2 中的 E1 值:

E2.A // Can not resolve symbol A

但您可以这样称呼它们:

E2(0) // A

或:

E2.withName(E1.A.toString) // A

May be that's the way:

object E1 extends Enumeration {
    type E1 = Value
    val A, B, C = Value
}
class ExtEnum(srcEnum: Enumeration) extends Enumeration {
    srcEnum.values.foreach(v => Value(v.id, v.toString))
}
object E2 extends ExtEnum(E1) {
    type E2 = Value
    val D, E = Value
}
println(E2.values) // prints > E2.ValueSet(A, B, C, D, E)

One remark: it's not possible to use E1 values from E2 by name:

E2.A // Can not resolve symbol A

But you can call them like:

E2(0) // A

or:

E2.withName(E1.A.toString) // A
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文