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