0

だから私はこの変数 currentPartNumber を持っています。これは 0 から始まります。変数がゼロに等しい場合、変数が 1 に変更され、テキストが出力されます。2 番目の関数についても同じです。最初の関数で変数が 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。関数内の from を削除してください。

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 に答える