初学者:在斯卡拉2.10斯卡拉类型别名?(Beginner: Scala type alias in

2019-08-19 05:39发布

为什么这个代码失败,错误编译:未发现:价值矩阵? 从文档和一些(可能是过时的)代码示例这应该工作?

object TestMatrix extends App{  
type Row = List[Int]
type Matrix = List[Row]


val m = Matrix( Row(1,2,3),
                Row(1,2,3),
                Row(1,2,3)
              )


}

Answer 1:

Matrix是指一个类型,但你使用它作为一个值。

当你做List(1, 2, 3)你实际上调用List.apply ,这是一个工厂方法List

为了解决您的编译错误,您可以定义自己的工厂MatrixRow

object TestMatrix extends App{  
  type Row = List[Int]
  def Row(xs: Int*) = List(xs: _*)

  type Matrix = List[Row]
  def Matrix(xs: Row*) = List(xs: _*)

  val m = Matrix( Row(1,2,3),
      Row(1,2,3),
      Row(1,2,3)
      )
}


Answer 2:

从这个文章你。

另请注意,大多数在包斯卡拉类型别名走来同名的值别名。 例如,有List类和List对象的值别名类型别名。

有解决的问题转化为:

object TestMatrix extends App{  
  type Row = List[Int]
  val Row = List
  type Matrix = List[Row]
  val Matrix = List

  val m = Matrix( Row(1,2,3),
                  Row(1,2,3),
                  Row(1,2,3))
}


文章来源: Beginner: Scala type alias in Scala 2.10?
标签: scala