次の Scala コードでは、val に代入できないというコンパイル エラーが発生します。
簡単な例:
class State {
val a = 1
val b = 2
def compute( res: =>Int, add : Int ): Unit = {
res = add + 123456
}
compute(a,b)
compute(b,a)
}
私の実際の使用に近い例:
class Editor {
var str:String = ""
var cursor:Int = 0
case class UndoState(str:String, cursor:Int)
var undoState = Seq[UndoState]()
var redoState = Seq[UndoState]()
def undo(): Unit = if (undoState.nonEmpty) {
redoState = UndoState(str,cursor) +: redoState
str = undoState.head.str
cursor = undoState.head.cursor
undoState = undoState.tail
}
def redo(): Unit = if (redoState.nonEmpty) {
undoState = UndoState(str,cursor) +: undoState
str = redoState.head.str
cursor = redoState.head.cursor
redoState = redoState.tail
}
}
元に戻す/やり直しは非常に似ているため、共通コードを関数に抽出したいと思います。これは、ソース/ターゲットのペアをredoState
/として渡しundoState
、その逆を行いたいと考えていました。
関数が何かを格納する場所を特定する方法はありますか? (C++ では、この状況ではメンバーへのポインターを渡します)。