scala/ScalaBook/chapter-12/src/main/scala/scalabook/ep/family/oc/reprlang.scala
package scalabook.ep.family.oc
/**
* Operation extensions (easy)
* @author Christos KK Loverdos
*/
trait ReprLang extends BaseLang {
class ReprOp extends BaseOp { this: Operation =>
var result: Option[String] = None
def apply(data: BaseD) = {
data.perform(this)
result.get
}
def computeNumD(data: NumD) {
this.result = Some(data.value.toString)
}
}
def newReprOp(): ReprOp with Operation
object repr {
def apply(data: BaseD) = newReprOp()(data)
}
}
object FixReprLang extends ReprLang {
type Operation = BaseOp
def newEvalOp() = new EvalOp
def newReprOp() = new ReprOp
}