为什么 scala 枚举不从其他枚举中选择值作为它的值?

Why doesn't scala enumeration not pick values from other enum as its value?

我试图理解为什么 Scala 枚举在创建为其中的值时不从其他枚举类型中选择值。假设我有以下

trait SchemaBase extends Enumeration {

  implicit def valueToVal(x: Value): Val = x.asInstanceOf[Val]

  case class Val(name: String, dataType: DataType, nullable: Boolean) extends super.Val {
    val col: Column = functions.col(name)
  }

  protected def column(name: String, dataType: DataType, nullable: Boolean = true): SchemaBase.Val = {
    Val(name, dataType, nullable).asInstanceOf[SchemaBase.Val]
  }

object SchemaBase extends SchemaBase

现在,如果我创建 Enumerations AScehmaBSchema,如下所示:

object ASchema extends SchemaBase {
  val Id: SchemaBase.Val = column("a_id", IntegerType)
  val BName: SchemaBase.Val = BSchema.Name
}

object BSchema extends SchemaBase {
  val Name: SchemaBase.Val = column("b_name", StringType)
}

此处 ASchema.BName 将在 ASchemaValueSet 中不可用。

我理解BNameBSchema的一个枚举值,知道解决这个问题的方法,但是想知道为什么这个行为?

Each call to a Value method adds a new unique value to the enumeration.

那真的应该是“the Value constructor”,当然还有调用 可以是间接的(例如 column 调用 SchemaBase.Val 构造函数,后者调用 Enumeration.Val 构造函数,后者调用 Enumeration.Value 构造函数)。正如下一句所说,这只是惯例

these values are usually defined as val members of the enumeration.

您可以自由拥有任何其他成员,或者不将某些或所有值定义为 val。并且

val BName: SchemaBase.Val = BSchema.Name

不调用 Value 构造函数(ASchemaBSchema )。就是这样。