首页 > 解决方案 > 如何为 Scala 3 枚举创建通用方法

问题描述

我想enumDescr为任何 Scala 3 枚举提供一个简单的函数。

例子:

  @description(enumDescr(InvoiceCategory))
  enum InvoiceCategory:
    case `Travel Expenses`
    case Misc
    case `Software License Costs`

Scala 2中,这很简单 ( Enumeration):

def enumDescr(enum: Enumeration): String =
  s"$enum: ${enum.values.mkString(", ")}"

但它是如何在Scala 3中完成的:

def enumDescr(enumeration: ??) = ...

标签: scalaenumsscala-3

解决方案


我没有看到所有enum伴生对象共有的任何共同特征。

values但是,您仍然可以反射性地调用:

import reflect.Selectable.reflectiveSelectable

def descrEnum(e: { def values: Array[?] }) = e.values.mkString(",")

enum Foo:
  case Bar
  case Baz

descrEnum(Foo) // "Bar,Baz"

推荐阅读