我工作的一階任務來實現:斯卡拉使用VAL作爲計數器
的observeCounter函數有一個參數f:接受(參考到)一個計數器實例,但沒有返回值的函數。 observeCounter函數應該調用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。我不知道如何做到這一點。有什麼建議麼?
遞歸,兄弟。 – Marcin
什麼知識是要求您演示的問題?因爲假設你在JVM上,你可以很容易地使用'val total = new java.util.concurrent.atomic.AtomicInteger',然後使用例如'的AtomicInteger#incrementAndGet'。 – Yawar
還要注意,如果使用'override'和'super',繼承繁重的代碼會更清晰。 – Yawar