【发布时间】:2017-02-27 22:48:47
【问题描述】:
我正在做一个 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。我不知道如何做到这一点。有什么建议吗?
【问题讨论】:
-
递归,兄弟。
-
问题要求你演示什么知识?因为假设您在 JVM 上,您可以轻松地使用
val total = new java.util.concurrent.atomic.AtomicInteger,然后使用例如改变它。AtomicInteger#incrementAndGet. -
另请注意,如果使用
override和super,重继承的代码会更清晰。