如何使Scala倒计时功能起作用?

时间:2013-03-28 03:50:00

标签: function scala recursion println

基本上我想要这个代码来做的是定义一个函数,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
 }
}

2 个答案:

答案 0 :(得分: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]并将count更改为println(count.toString)

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

答案 1 :(得分:1)

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

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

请注意,可以修改var的值,但不能再修改它。

此外,您在函数调用中声明并初始化timeNum var。结果是,一旦编译,你将重复打印相同的值(20)。

此外,timeLeft var也是多余的。