我有一个flatmap
正在经历的Sequence
,我正在使用case
它来识别 中的不同元素Sequence
,并用其他东西替换这些元素。但是,在某些情况下,我还想增加一个计数器变量。我可以在里面放一条指令case
吗?似乎我不能,因为里面的case
内容将替换Sequence
. 这可能吗?这是我尝试过的代码,但它不起作用:
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
吗?任何建议表示赞赏。