enum Expr {
Cst(Int)
Add(Expr, Expr)
Mul(Expr, Expr)
Sub(Expr, Expr)
Div(Expr, Expr)
}
func exec(self : Expr) -> Int {
match self {
Cst(i) => i
Add(l, r) => exec(l) + exec(r)
Mul(l, r) => exec(l) * exec(r)
Sub(l, r) => exec(l) - exec(r)
Div(l, r) => exec(l) / exec(r)
}
}
func init {
let a1 = Expr::Add(Mul(Cst(1), Cst(2)), Cst(3))
let a2 = Expr::Mul(Cst(10), Cst(20))
let a3 = Expr::Mul(a1, a2)
let a4 = Expr::Sub(a3, Add(Cst(20), Cst(30)))
let a5 = Expr::Div(a4, Cst(10))
a5.exec().print()
}
如题,一定要将参数名定义为self才能用.的语法,用起来感觉有点奇怪。
这里有提到。但是我觉得参数名只是一个提示作用。用self或者其他的命名不应该影响调用方式吧。
还有就是这里的enum 没有标记为recursive。moonbit中enum是什么样的内存布局呢?采用链表吗?这样是不是对非递归的enum有性能的问题呢?