为什么可以';我不能调用Scala Seq.empty[Int]()方法吗?

为什么可以';我不能调用Scala Seq.empty[Int]()方法吗?,scala,Scala,我试图创建一个名为\u 1d\u matrix的类,它是一个1d矩阵。我想用0填充它 因此,我尝试调用Seq对象的empty方法(当然不是trait),如文档中提到的:$.html\empty[A]:CC[A] 目前我的代码是: class Calc(val width : Int) { private val _1d_matrix : Seq.empty[Int]() } 但有三个错误: 为空未定义 ()无法写入(2个错误:“或应换行符”+“应定义或声明”) 我认为这是因为不允许直

我试图创建一个名为
\u 1d\u matrix
的类,它是一个1d矩阵。我想用0填充它

因此,我尝试调用
Seq
对象的
empty
方法(当然不是trait),如文档中提到的:$.html\empty[A]:CC[A]

目前我的代码是:

class Calc(val width : Int) {

  private val _1d_matrix : Seq.empty[Int]()


}
但有三个错误:

  • 为空
    未定义

  • ()
    无法写入(2个错误:“或应换行符”+“应定义或声明”)


  • 我认为这是因为不允许直接使用
    Seq
    而不是
    List
    (例如)。但是:为什么?毕竟,
    Seq
    是一个
    对象(也是一个
    特征,但不在我的代码中)。

    初始化字段的正确方法如下所示:

    private val _1d_matrix = Seq.empty[Int]
    


    在scala中定义0-arity(无参数)方法有两种方法-在名称
    def exit()
    后有一对括号,而没有括号:
    def empty

    以前一种方式定义时,可以使用括号或不使用括号调用它:
    exit()
    exit
    -两者都可以。但是当括号未包含在方法定义中时,您也不能在调用站点使用它们:
    Seq.empty[Int]
    有效,但
    Seq.empty[Int]()
    无效

    惯例是对有副作用的函数使用括号,而不是对纯函数调用使用括号

    代码的另一个问题是您有一个
    ,需要将其作为作业

    因此,类似这样的方法应该会奏效:

     val _1d_matrix = Seq.empty[Int]
    

    您的想法是正确的,但有几个语法错误

    private val\u 1d\u矩阵:Seq.empty[Int]()

    此处用于定义类型注释,因此它尝试查找类型
    Seq.empty
    ,而不是方法。这失败了,因为没有这样的类型

    使用
    =
    来指定值。在这里添加类型是可选的,因为Scala能够推断正确的类型

    另一个是empty方法的定义没有paren,因此必须使用
    Seq.empty[Int]
    而不是
    Seq.empty[Int]()

     val _1d_matrix = Seq.empty[Int]