2015-12-13 89 views
0

我有以下方法,我正在寻找一个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两个整型字段。

为什么块不能包含声明? 这是我的代码问题?

+0

你能添加堆栈跟踪吗?类Pos定义也是如此 –

回答

5

您的问题是,你正在写 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) 

玩得开心

2

补充选定的答案,与

var pos: Pos 

问题是pos没有任何东西(所以“声明中初始化“错误)。

这两个初始化将有效(一般情况下):

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

但在你的情况,你应该使用val其次构造

val newPos = new Pos(...) 

如前所述,使用不变性在斯卡拉每当可能。