Автокласс не может иметь поля, являющиеся событиями


#21

Вот кусок ArithmSimplify.pas - стандартного примера для match:

type
  Expr = interface
  end;
  V = auto class(Expr)
    name: string;
  end;
  Cons = auto class(Expr)
    r: real;
  end;
  Add = auto class(Expr)
    left,right: Expr;
  end;
  Mult = auto class(Expr)
    left,right: Expr;
  end;
  Neg = auto class(Expr)
    ex: Expr;
  end;
  
function NegC(ex: Expr) := new Neg(ex);  
function ConsC(r: real) := new Cons(r);  
function AddC(ex1,ex2: Expr) := new Add(ex1,ex2);  
function MultC(ex1,ex2: Expr) := new Mult(ex1,ex2);  
function VC(name: string) := new V(name);  

В auto classах еще и деконструкторы автоматически генерируются. Мы хотели еще и производящие функции, которые Вы видите, но к сожалению в отличие от Scala у нас нельзя чтобы функция имела то же имя, что и класс


#22

Не надо изобретать новых терминов. Это события, а не “поля-события”.