Coffeescript树扩展了类不工作

时间:2016-10-21 23:35:55

标签: javascript tree coffeescript extends

我需要创建一个树,例如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())




演示:https://jsfiddle.net/f3ry/D9kBP/24/ 感谢。

2 个答案:

答案 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();