【问题标题】:How do I get this Scala count down function to work?如何让这个 Scala 倒计时功能工作?
【发布时间】:2013-03-18 10:11:37
【问题描述】:
基本上,我希望这段代码做的是定义一个函数 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
}
}
【问题讨论】:
标签:
function
scala
recursion
println
【解决方案1】:
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)
这当然不是线程安全的。
【解决方案2】:
正如下面的编译器错误所述,您定义了相同的 var 两次。
console>:11: error: timeNum is already defined as variable timeNum
var timeNum = timeLeft
^
请记住,可以修改var 的值,但不能再次定义它。
此外,您在函数调用中声明并初始化timeNum var。结果是,一旦编译完成,您将重复打印相同的值 (20)。
另外,timeLeft var 是多余的。