为什么此代码无法使用错误进行编译:未找到:值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)
)
}
答案 0 :(得分:48)
Matrix
表示类型,但您将其用作值。
执行List(1, 2, 3)
时,您实际上正在调用List.apply
,这是List
的工厂方法。
要修复编译错误,您可以为Matrix
和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)
)
}
答案 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))
}