Scala - 块不能包含声明

时间:2015-12-13 16:25:55

标签: scala

我在以下方法中搜索2D矢量中字符的位置。

  def findChar(c: Char, levelVector: Vector[Vector[Char]]): Pos = {
    var pos: Pos
    pos.x = levelVector.indexWhere(row => row.indexOf(c) > 0)
    pos.y = levelVector(pos.x).indexOf(c)
    pos
  }

pos有两个整数字段,记住x和y轴上的位置

但是,在var pos: Pos行上,我收到错误Block cannot contain declarations

为什么该块不能包含声明? 我的代码存在哪个问题?

2 个答案:

答案 0 :(得分:6)

你的问题是你在写作 var pos:Pos

你应该写:

val pos = new Pos(...)

无论如何,在阅读你的代码时,它是用scala编写的那种java。 如果你可以是不变的,那就这样吧。 在scala中,您应该使用变量实例化您的类。这意味着你不能改变类的状态,即

之类的语句
pos.x =  //something
pos.y =  //something

正在改变变量pos的状态。 我建议不变 即

val x = //something
val y = //something 
val newPos = Pos(x,y)

玩得开心

答案 1 :(得分:6)

补充所选答案,

的问题
var pos: Pos

pos没有用任何东西初始化(因此"声明"错误)。

这两个初始化将是有效的(对于一般情况):

var pos: Pos = null
// or
var pos: Pos = new Pos(...)

但在你的情况下,你应该使用val后跟构造函数

val newPos = new Pos(...)

如上所述,尽可能在Scala中使用不变性。