我正在进行scala任务来完成此任务:
observeCounter函数有一个参数f:一个接受(引用)Counter实例但什么都不返回的函数。 observeCounter函数应该使用(引用)对象(扩展Counter的类)来调用f。 扩展Counter的类必须跟踪调用增量/减量的总次数。 即,如果在实例上调用增量方法3次,并且在同一实例上调用减量方法2次,那么它应该存储5(除了现有字段n之外的某处)。 observeCounter应该调用f,然后返回f对实例调用增量/减量的总次数。
class myCounter extends Counter {
val total = 0
def increment () = {increment(); total = total + 1;}
def decrement () = {decrement(); total = total + 1;}
def get() : Int = total
}
def observeCounter (f : Counter => Unit) : Int = {
val o1 = new myCounter()
f(o1)
o1.get()
}
其中一个要求是使用val而不是var。我不知道如何实现这一目标。有什么建议吗?
答案 0 :(得分:1)
我现在看到的最简单的方法是:
class myCounter extends Counter{
object counter{
var count = 0
}
val total = counter
def increment () = {super.increment(); total.count+=1}
def decrement () = {super.decrement(); total.count-=1;}
def get() : Int = total.count
}
答案 1 :(得分:0)
您有两种选择。您可以使用持久不可变,其中f()返回Counter的更新副本,或者使用可变数据结构(使用var),或使用变量来解决使用val来使用单个元素数组包装var或一个AtomicInteger或类似的东西。