You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 3.3.1中能否为枚举Case设置自定义整数值?

在Scala 3.3.1中为枚举Case设置自定义整数值的方法

先明确:Scala 3不允许用户重写枚举的ordinal方法,这就是你碰到报错the ordinal method of enum class MyEnum can not be defined by the user的原因——ordinal是编译器自动生成的固有方法,用来标记case的声明顺序,根本没法手动修改。

不过要实现给每个枚举case设置自定义整数值的需求,有几个靠谱的办法:

1. 给枚举添加自定义字段

直接给每个枚举case定义一个专属的整数字段,比如叫value:

enum MyEnum(val value: Int):
  case E1 extends MyEnum(1)
  case E2 extends MyEnum(5)
  case E3 extends MyEnum(10)

使用时直接访问value字段即可:

println(MyEnum.E1.value) // 输出1

2. 定义映射关系

如果不想修改枚举本身的结构,可以在枚举的伴生对象里定义一个从case到自定义整数的映射:

enum MyEnum:
  case E1, E2, E3

object MyEnum:
  val customValues: Map[MyEnum, Int] = Map(
    E1 -> 1,
    E2 -> 5,
    E3 -> 10
  )

调用方式:

println(MyEnum.customValues(MyEnum.E1)) // 输出1

3. 用伴生对象的方法封装

还可以在伴生对象里写一个匹配方法来返回自定义值:

enum MyEnum:
  case E1, E2, E3

object MyEnum:
  def getCustomValue(e: MyEnum): Int = e match
    case E1 => 1
    case E2 => 5
    case E3 => 10

调用时:

println(MyEnum.getCustomValue(MyEnum.E2)) // 输出5

说白了就是没法修改ordinal,但上面这几种方式都能实现你要的自定义整数值需求。

内容的提问来源于stack exchange,提问作者Karl S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:28:21