我尝试创建一个名为_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]()
}
但有三个错误:
empty
未定义
()
无法写入(2个错误:&#34 ;;或者预计换行符#34; +"预期定义或声明")
我认为这是因为它不允许直接使用Seq
代替List
(例如)。但为什么 ?毕竟,Seq
是object
(和trait
,但不在我的代码中。
答案 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]()