scala - 默认情况下,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)
解决方案
根据 Scala 3 的规则,类的参数对enum
类来说是私有的,这是预期的行为enum
,这与个别情况的参数是公共的不同。
正如您所提到的,您可以通过将参数设为 a 来公开它们val
。
但是,文档似乎并没有引起人们对这一事实的注意。
推荐阅读
- vba - 是否有一种等效的方法可以自动填充到 vba 中一行的最后一列,就像一列中的最后一行一样?
- python - 函数缺少 2 个必需的位置参数:“X_train”和“y_train”
- ios - 如果 Webview 无法加载 URL,则切换视图?
- javascript - 增加 HERE 地图中的渲染距离 javascript api
- amazon-ec2 - 即使在 EC2 和 Volume 上实施策略后,Volume 也没有显示
- java - Spring Cloud 数据流:“TASK_NAME”列的值太长(带有 Spring Batch 的 DeployerPartitionHandler)
- r - 如何解决最佳集群数量的问题?
- sql - 是否可以从 BigQuery 元数据中提取列描述
- r - 在 R 中,如何根据间隔减少数据框中的行数?
- python-3.x - Python模块无法从同级目录导入函数