public static DynValue select(ScriptExecutionContext executionContext, CallbackArguments args) { if (args[0].Type == DataType.String && args[0].String == "#") { if (args[args.Count - 1].Type == DataType.Tuple) { return(DynValue.NewNumber(args.Count - 1 + args[args.Count - 1].Tuple.Length)); } else { return(DynValue.NewNumber(args.Count - 1)); } } DynValue v_num = args.AsType(0, "select", DataType.Number, false); int num = (int)v_num.Number; List <DynValue> values = new List <DynValue>(); if (num > 0) { for (int i = num; i < args.Count; i++) { values.Add(args[i]); } } else if (num < 0) { num = args.Count + num; if (num < 1) { throw ScriptRuntimeException.IndexOutOfRange("select", 1); } for (int i = num; i < args.Count; i++) { values.Add(args[i]); } } else { throw ScriptRuntimeException.IndexOutOfRange("select", 1); } return(DynValue.NewTupleNested(values.ToArray())); }