1

基本的に、このコードで実行したいのは、関数 timeCount を定義することです。関数が呼び出されるたびに、21 から 1 を減算し、結果を出力して、結果を timeNum に等しくします。したがって、21 から 1 を引いて 20 にし、20 を出力してから、timeNum を 20 に等しくしたいのです。次に関数が呼び出されたときには、19、18 などと等しくなります。 .

ただし、このコードは機能しません。どうすれば自分がしたいことを手に入れることができますか?

def timeCount() = {
  var timeNum = 21
  var timeLeft = timeNum-1
  println(timeLeft)
  var timeNum = timeLeft
 }
}
4

2 に答える 2

2
class TimeCount(initial: Int) extends Function0[Int] {
  var count = initial

 def apply = {
    count = count - 1
    count
 }
}

次のように使用します。

scala> val f = new TimeCount(21)
f: TimeCount = <function0>

scala> f()
res0: Int = 20

scala> f()
res1: Int = 19

scala> f()
res2: Int = 18

あなたが求めていたものから2つの変更を加えました。関数のコンストラクターへのパラメーターで始まる番号を作成しました。印刷する代わりにカウントを返しました。本当に印刷したい場合、 に変更Function0[Int]してにFunction0[Unit]変更countprintln(count.toString)

もちろん、これはスレッドセーフではありません。

于 2013-03-28T04:05:55.993 に答える
1

以下のコンパイラ エラーが示すように、同じものvarを 2 回定義しました。

console>:11: error: timeNum is already defined as variable timeNum
         var timeNum = timeLeft
             ^

a の値を変更することはできますが、var再度定義することはできないことに注意してください。

timeNum varさらに、関数呼び出しでを宣言して初期化します。その結果、コンパイルが完了すると、同じ値 (20) が繰り返し出力されます。

また、timeLeft varは余分です。

于 2013-03-28T03:59:22.067 に答える