首页 > 解决方案 > 默认情况下,Scala3 枚举参数是“public val”字段吗?它们似乎是“私人价值”

问题描述

默认情况下,枚举参数似乎是“private val”而不是“public val”。

enum Planet(radius: Double):
    case Mercury extends Planet(2.4397e6)
    def getRadius() = this.radius // OK when accessed as a private member.
def getRadius(planet:Planet) = planet.radius  // Error: value radius cannot be accessed as a member of planet:Planet

该问题可以通过指定“val”或“var”来解决。然后枚举参数变为公共。

enum Color(val rgb: Int):
    case Red   extends Color(0xFF0000)
def getRGB(color:Color):Int = color.rgb  // OK. rgb can be accessed

这是预期的行为吗?编译器错误?(2021.2.443)

标签: scalaenumsscala-3

解决方案


根据 Scala 3 的规则,类的参数对enum类来说是私有的,这是预期的行为enum,这与个别情况的参数是公共的不同。

正如您所提到的,您可以通过将参数设为 a 来公开它们val

但是,文档似乎并没有引起人们对这一事实的注意。


推荐阅读