0

所以我有这个变量,currentPartNumber,它开始等于 0。我想要发生的是在我的函数中,如果变量等于 0,则将其更改为 1 并打印出文本。我的第二个函数也是如此 - 如果变量在我的第一个函数中更改为 1 并且等于 1,我希望变量更改为 2 并打印出文本。

问题是:如何让变量像我想要的那样随着每个函数调用而改变?

var currentPartNumber = 0

def roomOne():Unit = {
   if (currentPartNumber < 1) {
      var currentPartNumber = 1
      println("You now have parts 1 of 4.")
     } else {
      println("This part cannot be collected yet.")
   {
   }


def roomTwo():Unit = {
   if (currentPartNumber = 1) {
      var currentPartNumber = 2
      println("You now have parts 2 of 4.")
     } else {
      println("This part cannot be collected yet.")
   {
   }
4

2 回答 2

3

不要隐藏变量:var从函数内部删除。

var关键字声明了一个成员/变量。在这种情况下,名称与从外部范围隐藏变量的名称相同。因此赋值(作为声明的一部分)对外部变量没有影响。

// no var/val - assignment without declaration
currentPartNumber = 2

也可以看看:

于 2013-03-28T04:36:09.243 回答
1

在一个可以访问和修改它currentPartNumber的类中声明。roomOne()roomTwo()

class Parts{
  var currentPartNumber = 0

  def roomOne():Unit = {
    if (currentPartNumber < 1) {
      currentPartNumber = 1
      println("You now have parts 1 of 4.")
    } else {
      println("This part cannot be collected yet.")
    } 
  }  

  def roomTwo():Unit = {
    if (currentPartNumber == 1) {
       currentPartNumber = 2
       println("You now have parts 2 of 4.")
     } else {
      println("This part cannot be collected yet.")
     }
   }
}



scala> :load Parts.scala
Loading Parts.scala...
defined class Parts
scala> var parts = new Parts
parts: Parts = Parts@5636a67c
scala> parts.currentPartNumber
res0: Int = 0
scala> parts.roomOne
You now have parts 1 of 4.
scala> parts.roomTwo
You now have parts 2 of 4.
于 2013-03-28T04:39:17.540 回答