public FunctionResult Invoke(IEnumerable<ResultNode> values) { var context = new InvocContext(); var arguments = new Arguments(values.ToArray()); return Invoke(context, arguments); }
public override FunctionResult Invoke(InvocContext context, Arguments args) { if (args.Length <= 0) return FunctionResult.Fail("Function requires at least one argument"); if (args.AllCouldBeCastAsInt()) { var result = Enumerable.Range(0, args.Length).Sum(x => args.GetAsInt(x)); return FunctionResult.Success(result, Core.Token.Int); } if (args.AllCouldBeCastAsDouble()) { var result = Enumerable.Range(0, args.Length).Sum(x => args.GetAsDouble(x)); return FunctionResult.Success(result, Core.Token.Float); } return FunctionResult.Fail("Cannot call method with arguments"); }
public override FunctionResult Invoke(InvocContext context, Arguments args) { if (args.Length != 1) { return FunctionResult.Fail("Unrecognised number of params"); } if (args.CouldBeCastAsInt(0)) { var result = _rand.Next(args.GetAsInt(0)); return FunctionResult.Success(result, Core.Token.Int); } if (args.CouldBeCastAsDouble(0)) { var result = _rand.NextDouble() * args.GetAsDouble(0); return FunctionResult.Success(result, Core.Token.Float); } return FunctionResult.Fail("Type cannot be used as argument"); }
public abstract FunctionResult Invoke(InvocContext context, Arguments args);