0
我在爲scala編譯器項目設計類層次結構時遇到問題。層次結構如下所示:Scala的類層次結構的設計。構造函數參數與成員
abstract class TACInstr(index:Int)
case class TAC_Label(label: String,index : Int) extends TACInstr(index)
case class TAC_Jump(label: TAC_Label,index : Int) extends TACInstr(index)
...
這裏index
是表示在一些上市指令的順序號的變量。至少對於TAC_Label
子類,我不能將這個變量聲明爲不可變的,這一點很重要,因爲它在我的代碼中並不總是可預測的,因此聲明時它的索引應該是什麼。
後來,我在下面的定義使用該索引值:
def getBlock(i : TACInstr) : BasicBlock =
blocks.find(b => b.instr.index == i.index).get
所以基本上我比較不同指令中的兩個指標的平等。這提供了以下錯誤:
Cannot resolve symbol index
因爲很顯然這樣的索引是私有的類定義
我接近
我想聲明的層次結構如下:
abstract class TACInstr(var index:Int)
case class TAC_Label(label: String,override var index : Int) extends TACInstr(index)
case class TAC_Jump(label: TAC_Label,override var index : Int) extends TACInstr(index)
...
但我得到以下錯誤類型:
Error:... overriding variable index in class TACInstr of type Int;
variable index cannot override a mutable variable
是否有解決這個問題的任何優雅的解決方案?比聲明index
成員更好的東西?
我不確定您是否意味着您的代碼是有效的解決方案。在我的情況下,編譯器要求爲導致我的錯誤方法的變量的覆蓋修飾符... – Rodrigo
@Javier我已更新代碼。我想我添加了足夠的元素來理解發生了什麼。隨意問你是否不明白任何事情。 – Sisso