初学者:Scala 2.10中的Scala类型别名?

时间:2013-04-03 09:38:52

标签: scala

为什么此代码无法使用错误进行编译:未找到:值Matrix?从文档和一些(可能是过时的)代码示例中,这应该有用吗?

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)
              )


}

2 个答案:

答案 0 :(得分:48)

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)
      )
}

答案 1 :(得分:5)

来自this文章。

  

还要注意包scala中的大多数类型别名   是一个同名的别名。例如,有一种类型   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))
}