Scala3中如何从Enum枚举类型中随机选取元素
Scala 3 枚举随机选取元素方案
Scala 3 的enum和 Scala 2 旧版的Enumeration实现逻辑完全不同,旧版解决方案不生效是正常现象,可按以下方式实现:
最简实现(仅针对你定义的Colors枚举)
enum默认自动生成values字段,是包含所有枚举实例的数组,直接按随机索引取值即可:
import scala.util.Random // 随机取值 val randomColor = Colors.values(Random.nextInt(Colors.values.length))
通用实现(支持任意 Scala 3 枚举)
如果需要封装成可复用的通用方法,可借助类型类实现:
import scala.util.Random import scala.reflect.ClassTag def randomEnum[T <: Enum[T] : ClassTag]: T = val enumValues = summon[ClassTag[T]].runtimeClass.getEnumConstants.asInstanceOf[Array[T]] enumValues(Random.nextInt(enumValues.length)) // 调用示例 val randomColor = randomEnum[Colors]
特殊场景适配
- 如果需要固定随机结果用于复现测试,可自定义带种子的
Random实例:// 种子固定为42,每次运行得到的随机枚举值完全一致 val seededRandom = Random(42) val fixedColor = Colors.values(seededRandom.nextInt(Colors.values.length))
内容的提问来源于stack exchange,提问作者olimath
相关产品推荐
相关产品推荐

