Scala:为什么我不能像这样增加int?

时间:2017-04-11 00:04:24

标签: scala

Item类有一个以0开头的实例变量id。我想调用nextID将id从0递增到1;但是,当我执行新的Item()。id + = 1时,存在类型不匹配。那是为什么?

class Item {
 private var id: Int = 0
 this.id = Item.nextId
}
// companion object
object Item{
 def apply() = new Item()
 def nextId: Int = {
   new Item().id += 1  //type mismatch
 }
}

1 个答案:

答案 0 :(得分:2)

从哪里开始?

def nextId: Int = {
  new Item().id += 1
}

+=是一项任务。作业没有返回值,但nextId应该是Int。我们可以像这样解决它......

def nextId: Int = {
  val nitem = new Item()
  nitem.id += 1
  nitem.id
}

......但还有其他问题。每次有人调用nextId时,它都会创建一个新的Item,该项的id会递增,会返回此id的更新值,以及新的Item被扔掉了。这听起来不对。

class Item {
  private var id: Int = 0
  this.id = Item.nextId
}
嗯,这看起来很可疑。创建Item后,它会调用nextId,但nextId会创建一个新的Item,它会调用nextId,这会创建一个新Item调用....它将在哪里结束?