2017-03-09 10 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クラスは、何も影をつけたり上書きしないので、実際にはカウンターを拡張しません。さらに、シングルトン(オブジェクトカウンタなど)を使用して、追加したものを追跡する必要があります。& substractions。がんばろう。

+0

ありがとう、私は実際にそれを渡すことができました。私は私のインクリメントとデクリメントを追跡することができ、def incとdef decの内部で別の変数を作成する必要がありました。 – yeny314

関連する問題