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

我根据您的要求进行了两项更改,我将数字从函数的构造函数的参数开始,我返回了计数而不是打印它,因为这些看起来更有用如果您真的只想打印它, 更改Function0[Int]Function0[Unit]和更改countprintln(count.toString)

当然,这不是线程安全的。

于 2013-03-28T04:05:55.993 回答
1

正如下面的编译器错误所述,您定义了var两次相同的内容。

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 回答