我需要创建一个树,例如CALCULATE 2个数字。我在咖啡脚本中做,由于扩展类而转换了javascript。
class Expression
@Evaluate = -> 0
class Const extends Expression
constructor: (value)->
class BinaryOperation extends Expression
constructor: (L, R)->
class Add extends BinaryOperation
@Evaluate = -> L.Evaluate() + R.Evaluate();
expr = new Add(new Const(10), new Const(10));
alert(expr.Evaluate())

答案 0 :(得分:1)
您的问题是语法错误的组合以及对子类化如何工作的误解。这应该可以帮助你:
class Expression
Evaluate: () -> 0
class Const extends Expression
constructor: (@value) ->
Evaluate: () -> @value
class BinaryOperation extends Expression
constructor: (@L, @R)->
class Add extends BinaryOperation
Evaluate: -> @L.Evaluate() + @R.Evaluate();
expr = new Add(new Const(10), new Const(10));
alert(expr.Evaluate())
将@
添加到构造函数参数将其设置为新创建的对象的属性。覆盖Evaluate
方法允许执行操作。 Link to example
答案 1 :(得分:0)
我使用抽象类创建语法树。在python中工作非常好:
class Expression:
def Evaluate(self):
return 0;
class Const(Expression):
def __init__(self, nValue):
self.Value = nValue;
def Evaluate(self):
return self.Value;
class BinaryOperation(Expression):
def __init__(self, nL, nR):
self.L = nL;
self.R = nR;
class Add(BinaryOperation):
def Evaluate(self):
return self.L.Evaluate() + self.R.Evaluate();