2016-11-19 20 views
-3

UPDATE [SOLVED]:ネストされたゲートの外側にゲートを置くために必要ですWireクラス(感謝ディマ)。抽象クラス内にネストされたクラスのメソッドにアクセスするにはどうすればよいですか?

編集:私はなぜこの質問のためにdownvotedされたのかわかりません。 Martin OderskyのReactive Programmingでオンラインコースラコースを受講しているので、これは正当な質問です。講義3.6「離散事象シミュレーションの実装とテスト」を見てみると、Martinはコードを次のように正確に実装しています。私はしたし、彼はこれらのエラーを取得していない。これは割り当てではなく、すべてのコードが提示され、スライドから単純にコピーされました。実際のビデオの下のスクリーンショットは、ゲートがの内部に書かれていることを示しています。のWireクラスです。

enter image description here enter image description here

私は抽象クラスGatesを拡張する(ファイルCircuits.scala中)抽象クラスCircuitsを持っています。 Gatesには、クラスWire(GatesとWireは両方ともファイルGates.scalaにあります)が定義されています。このクラスの内部には、orGateのようないくつかの関数が定義されています。 orGateにアクセスし、Wireの中の他の機能にアクセスしようとすると、IDEはsymbol not foundという文句を言います。 CircuitsからorGateなどが表示されるように、私は特別なことをする必要がありますか?私の問題を説明するコードスニペットが続きます。

ファイルCircuits.scala:

package week3  
abstract class Circuits extends Gates { 

     def halfAdder(a: Wire, b: Wire, s: Wire, c: Wire) { 
     val d, e = new Wire 
     orGate(a, b, d)  // <--- symbol not found: orGate 
     andGate(a, b, c)  // <---- symbol not found: andGate 
     inverter(c, e)  // <--- etc. 
     andGate(d, e, s) 
     } 

     def fullAdder(a: Wire, b: Wire, cin: Wire, sum: Wire, cout: Wire) { 
     val s, c1, c2 = new Wire 
     halfAdder(a, cin, s, c1) 
     halfAdder(b, s, sum, c2) 
     orGate(c1, c2, cout) 
     } 

    } 

ファイル:Gates.scala:

package week3 


abstract class Gates extends Simulation { 

    def InverterDelay: Int 
    def AndGateDelay: Int 
    def OrGateDelay: Int 

    class Wire { 

    private var sigVal = false 
    private var actions: List[Action] = List() 

    def getSignal: Boolean = sigVal 
    def setSignal(s: Boolean): Unit = { 
     if (s != sigVal) { 
     sigVal = s 
     actions foreach (_()) 
     } 
    } 
    def addAction(a: Action): Unit = { 
     actions = a::actions 
     a() 
    } 

    def inverter(input: Wire, output: Wire): Unit = { 
     def invertAction(): Unit = { 
     val inputSig = input.getSignal 
     afterDelay(InverterDelay) { output setSignal !inputSig} 
     } 
     input addAction invertAction 
    } 


    def andGate(in1: Wire, in2: Wire, output: Wire): Unit = { 
     def andAction(): Unit = { 
     val in1Sig = in1.getSignal 
     val in2Sig = in2.getSignal 
     afterDelay(AndGateDelay) {output setSignal (in1Sig & in2Sig)} 
     } 

     in1 addAction andAction 
     in2 addAction andAction 
    } 


    def orGate(in1: Wire, in2: Wire, output: Wire): Unit = { 
     def orAction(): Unit = { 
     val in1Sig = in1.getSignal 
     val in2Sig = in2.getSignal 
     afterDelay(OrGateDelay) {output setSignal (in1Sig | in2Sig)} 
     } 

     in1 addAction orAction 
     in2 addAction orAction 
    } 

    def probe(name: String, wire: Wire): Unit = { 
     def probeAction(): Unit = { 
     println(name, currentTime, wire.getSignal) 
     } 
     wire addAction probeAction 
    } 


    } 
} 

答えて

-1

orGateaddActionsetSignalを除く他のほとんどのものは、Wireの外で定義されなければなりません。

また、あなたは本当にここにJavaコードを書いています(ただし、scala構文ではあります)。私はスカラで本やオンラインリソースを探し、最初のいくつかの章を読んで、その言語の基本的な概念とパラダイムを理解することをお勧めします。

+0

私はCourseraのコースのスライドからこのコードを卸売し、講師はそのコードをそのまま実行することができました。 – thetrystero

+0

さて、彼はそうではありませんでした...あなたのコードコピースキルについて教えてください。 ;) – Dima

+0

あなたは '' 'orGate'''というコメントを取り戻しますか?ほとんどのものは' 'Wire''の外で定義する必要がありますか? – thetrystero

関連する問題