예제 #1
0
 public static PipeValue Let(PipeContext context)
 {
     while (context.HasArgument())
     {
         string     name = (string)context.TakeArgument();
         PipeLambda fn   = context.TakeFunction();
         if (fn != null)
         {
             context.Globals[name] = fn.Invoke(context.Value);
         }
         else
         {
             context.Globals[name] = context.TakeArgument();
         }
     }
     return(PipeValue.Undefined);
 }
예제 #2
0
        public static PipeValue Sum(PipeContext context)
        {
            PipeValue  result = PipeValue.Undefined;
            PipeLambda fn     = context.TakeFunction();

            if (fn == null)
            {
                result = context.TakeArgument();
                fn     = context.TakeFunction();
            }
            if (fn == null)
            {
                if (context.HasArgument())
                {
                    fn = context.TakeArgumentAsKeyFunction();
                }
                else
                {
                    fn = new PipeLambda((obj, i) => obj);
                }
            }
            PipeValuePropertyEnumerator enumerator = context.Value.GetEnumerator();

            while (enumerator.MoveNext())
            {
                if (result != PipeValue.Undefined)
                {
                    result = result + fn.Invoke(enumerator);
                }
                else
                {
                    result = fn.Invoke(enumerator);
                }
            }
            return(result);
        }