RosettaCodeData/Task/History-variables/Elena/history-variables.elena
2020-02-17 23:21:07 -08:00

57 lines
912 B
Text

import extensions;
import system'collections;
import system'routines;
import extensions'routines;
class HistoryVariable
{
Stack previous := new Stack();
object value;
prop Value
{
get() = value;
set(value)
{
if ((this value) != nil)
{
previous.push(this value)
};
this value := value
}
}
undo()
{
ifnot (previous.isEmpty())
{
value := previous.pop()
}
else
{
value := nil
}
}
enumerator() => previous;
get string Printable() => this value;
}
public program()
{
var o := new HistoryVariable();
o.Value := 5;
o.Value := "foo";
o.Value := o.Value + "bar";
console.printLine(o);
o.forEach:printingLn;
o.undo().undo().undo();
console.printLine(o.Value ?? "nil")
}