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

时间:2018-01-10 15:39:24

标签: scala

我尝试创建一个名为_1d_matrix的属性的类,这是一维矩阵。我想用0填充它。

因此,我试图调用empty对象的方法Seq(当然不是特征),正如文档中提到的那样:http://www.scala-lang.org/api/2.12.3/scala/collection/Seq $ .html#empty [A ]:CC [A]

目前我的代码是:

class Calc(val width : Int) {

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


}

但有三个错误:

  1. empty未定义

  2. ()无法写入(2个错误:&#34 ;;或者预计换行符#34; +"预期定义或声明")

  3. 我认为这是因为它不允许直接使用Seq代替List(例如)。但为什么 ?毕竟,Seqobject(和trait,但不在我的代码中。

3 个答案:

答案 0 :(得分:3)

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

private val _1d_matrix = Seq.empty[Int]

private val _1d_matrix: Seq[Int] = Seq()

答案 1 :(得分:2)

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

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

惯例是对具有副作用的函数使用括号,而不是将它们用于纯函数调用。

您的代码的另一个问题是,您需要:才能进行分配。

所以,这样的事情应该有效:

 val _1d_matrix = Seq.empty[Int]

答案 2 :(得分:2)

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

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

:这里用于定义类型注释,因此它试图找到类型Seq.empty而不是方法。这失败了,因为没有这种类型。

使用=来分配值。此处添加类型是可选的,因为Scala能够推断出正确的类型。

另一个是没有parens定义的空方法,所以你必须使用Seq.empty[Int]而不是Seq.empty[Int]()