UPDATE [SOLVED]:ネストされたゲートの外側にゲートを置くために必要ですWire
クラス(感謝ディマ)。抽象クラス内にネストされたクラスのメソッドにアクセスするにはどうすればよいですか?
編集:私はなぜこの質問のためにdownvotedされたのかわかりません。 Martin OderskyのReactive Programmingでオンラインコースラコースを受講しているので、これは正当な質問です。講義3.6「離散事象シミュレーションの実装とテスト」を見てみると、Martinはコードを次のように正確に実装しています。私はしたし、彼はこれらのエラーを取得していない。これは割り当てではなく、すべてのコードが提示され、スライドから単純にコピーされました。実際のビデオの下のスクリーンショットは、ゲートがの内部に書かれていることを示しています。のWireクラスです。
私は抽象クラス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
}
}
}
私はCourseraのコースのスライドからこのコードを卸売し、講師はそのコードをそのまま実行することができました。 – thetrystero
さて、彼はそうではありませんでした...あなたのコードコピースキルについて教えてください。 ;) – Dima
あなたは '' 'orGate'''というコメントを取り戻しますか?ほとんどのものは' 'Wire''の外で定義する必要がありますか? – thetrystero