当前位置:  开发笔记 > 编程语言 > 正文

Scala - 块不能包含声明

如何解决《Scala-块不能包含声明》经验,为你挑选了2个好方法。

我有以下方法,我在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.

为什么块不能包含声明?我的代码有哪些问题?



1> David H..:

你的问题是你在写作 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> Jan K. S...:

补充所选答案,问题所在

var pos: Pos

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

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

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

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

val newPos = new Pos(...)

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

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有