コード例 #1
0
        public override async Task<object> Invoke(IExpression head, IExpression[] args)
        {
            var target = await head.Eval(this);
            var macro = target as PlasticMacro;
            var expression = target as IExpression;
            var array = target as object[];

            if (macro != null)
            {
                return await InvokeMacro(this, macro, args);
            }

            if (expression != null)
            {
                return await expression.Eval(this);
            }

            if (array != null)
            {
                var index = (int)(decimal) await args.First().Eval(this);
                return array[index];
            }
            throw new NotImplementedException();
        }