2017-03-09 74 views
-2

我創建了一個擴展到Counter的類,它跟蹤增加和減少。即時通訊設法調用xs,然後返回數字上升或下降的時間總和,這是由xs實例調用的,它的編譯卻失敗了。Scala中的子類型劃分

class Counter { 
    private var n = 0 
    def increment() = { n = n + 1 } 
    def decrement() = { n = n - 1 } 
    def get() : Int = n 
} 

def x (xs : Counter => Unit) : Int = { 
    class foo extends Counter { 
     var count = 0 
     def incrementAndGet = {count += 1; count} 
     def decrementAndGet = {count -= 1; count} 
    } 

    val counter1 = new foo 
    xs(counter1) 
    counter1.incrementAndGet 
    counter1.decrementAndGet 
} 

謝謝大家,我確實能夠通過它。我需要創建另一個變量,可以跟蹤我的增量和減量,然後在def inc和def dec的範圍內,我將添加到從計數中加上或減去的值:)

+1

如何定義計數器; '失敗'是什麼意思,你期望代碼做什麼,...?請詳細描述你的問題。 – stholzm

+3

通過我的測試你的代碼工作正常。我想它不會按照你想要的方式工作,但是你沒有描述你想要的東西,所以很難說。特別是,'xs(counter1)'這個陳述似乎毫無意義。 – jwvh

+1

這段代碼有很多錯誤(或至少是奇怪的)。 Counter屬性('n','increment()','decrement()'和'get()')有什麼意義?他們沒有在任何地方使用。是否有一些使用此漏洞的代碼?此外,「這個數字上升或下降的總次數」究竟是什麼?如果遞增,則遞減結果爲2或0?你能告訴你如何調用'x'?你以'xs'傳遞什麼?調用它的意義是什麼?如果您在不提及實施的情況下陳述原始問題,也許我們可以指導您找到合適的解決方案。 – slouc

回答

0

我建議你看看Java設計模式&最佳實踐第一。因爲它不影響或覆蓋任何東西,所以你的foo類並不真正擴展計數器。此外,你應該使用一個單身(對象計數器...)來跟蹤你的添加&減法。祝你好運。

+0

謝謝,我實際上能夠通過它。我需要創建另一個變量,可以跟蹤我的增量和遞減,然後在def inc和def dec中,我將添加到從計數中添加或減去:) – yeny314