0

flatmap通過するがあり、内のさまざまな要素を識別し、要素を別のものに置き換えるためにSequence使用しています。ただし、これらのケースのいくつかでは、カウンター変数も増やしたいと考えています。内に命令を入れることはできますか? の要素を置き換えるものは の中に入るので、私にはできないようです。これはまったく可能ですか?これが私が試したコードですが、うまくいきませんでした:caseSequencecasecaseSequence

var location = 0
code.flatMap {
        case Define(label) => Word("")                            // Return an empty Word, don't increase location
        case CodeWord(word) => word; location = location + 4    // Return the Word and increase location by 4
        case Use(label) => Word(Assembler.encodeUnsigned(labelToValue(label))); location = location + 4
                                                                  // Convert label into Seq, then into Word. Increase location.
        case BeqBne(bits, label) =>{ // Are brackets necessary?
            Word(bits ++ encodeUnsigned(labelToValue(label) - (location + 4))); location = location + 4 }
        case _ => require(false, s"Encountered unsupported code $code.");
      }

locationご覧case BeqBne(bits, label)のとおり、 の現在の値を使用する必要があるため、変数を更新することが重要ですlocation。外部でflatmapそのすべてを行う関数を作成し、その関数を呼び出して、それぞれの場合に内部で値を渡す必要がありflatmapますか? アドバイスをいただければ幸いです。

4

1 に答える 1