我有以下方法,我在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
.
为什么块不能包含声明?我的代码有哪些问题?
你的问题是你在写作
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)
玩得开心
补充所选答案,问题所在
var pos: Pos
是pos
没有用任何东西初始化(因此"声明"错误).
这两个初始化将是有效的(对于一般情况):
var pos: Pos = null // or var pos: Pos = new Pos(...)
但在你的情况下,你应该使用val
后跟构造函数
val newPos = new Pos(...)
如上所述,尽可能在Scala中使用不变性.