/// <summary> /// 定义类型切面 /// </summary> /// <param name="componentType"></param> /// <returns></returns> public static IAspectExpression For(Type componentType) { var aspect = new SingleTypeExpression(componentType); Aspect.AspectRepository.Register(aspect.ToAspect()); return(aspect); }
public static SingleTypeExpression <int, TContext> WithOps <TContext>(this SingleTypeExpression <int, TContext> expr) { expr.AddBinary(new BinarySymbol("+", 1), (a, b) => a + b); expr.AddBinary(new BinarySymbol("-", 1), (a, b) => a - b); expr.AddBinary(new BinarySymbol("*", 2), (a, b) => a * b); expr.AddBinary(new BinarySymbol("/", 2), (a, b) => a / b); expr.AddUnary(new UnarySymbol("-"), i => - i); return(expr); }
public override void PartTwo() { var expr = new SingleTypeExpression <long>(long.Parse); expr.AddBinary(new BinarySymbol("+", 2), (a, b) => a + b); expr.AddBinary(new BinarySymbol("*", 1), (a, b) => a * b); var sum = Input.Select(expr.Eval).Sum(); WriteLn(sum); }