20

为什么此代码无法编译并出现错误:未找到:值矩阵?从文档和一些(可能已过时)代码示例中,这应该有效吗?

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


}
4

2 回答 2

54

Matrix表示一种类型,但您将其用作值。

当你这样做时List(1, 2, 3),你实际上是在调用List.apply,这是List.

Matrix要修复编译错误,您可以为and定义自己的工厂Row

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)
      )
}
于 2013-04-03T09:48:36.820 回答
5

这篇文章你有。

还要注意,在包 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))
}
于 2013-04-03T11:14:32.773 回答