为什么Scala类在构造函数中不能有object类型的参数?

时间:2017-03-24 20:33:12

标签: java scala constructor

据我所知,object只是单例实例。我想创建包含单元格类型的枚举类型,然后使用包含坐标和枚举类型的构造函数创建class Cell。但是,它无法完成,我无法找到原因。

object CellType extends Enumeration {
  val Empty, X, O = Value
}

在另一个档案中:

class Cell(column: Int, row: Int, cellType : CellType) {
} // CellType is an object, and it doesn't work!

您是否有任何想法如何做,或者至少为什么Scala禁止在构造函数中使用对象?

错误讯息:

  

警告:(3,37)导入' CellType'是永久隐藏的   包模型导入中对象CellType的定义   de.htwg.model.CellType

1 个答案:

答案 0 :(得分:3)

var connectionString = "Data Source=ServerName; Initial Catalog=DataBaseName; User id=UserName; Password=Secret;"; 不是一个类型,它是一个对象。它实际上是其类型的唯一对象CellType。如果要使用只能是此对象的函数参数,可以使用类型为CellType.type的参数。但是,如果它只能是CellType.type,为什么还要把它作为一个论据呢?也可以直接使用对象,而不是将其作为参数传递。

您可能想要的不是CellType的类型,而是其枚举值的类型,恰好是CellType

注意:我个人觉得scala语言在同一级CellType.Valuetrait es(类型)和class s上定义相当令人不安,它们是单身人士。你不应该被这个明显的比喻误导,并且真正将对象视为值,将类和特征视为类型。