示例#1
0
        /// <summary>
        /// Returns a new function much like the supplied one, except that the first two arguments' order is reversed.
        /// </summary>
        /// <code>
        ///
        /// </code>
        public static VariadicFunction Flip(VariadicFunction fn)
        {
            object NewFunction(params object[] args)
            {
                if (args.Length == 0)
                {
                    return(fn(args));
                }
                if (args.Length == 1)
                {
                    return(fn(args));
                }
                else
                {
                    object[] newArgs = new object[args.Length];
                    Array.Copy(args, newArgs, args.Length);
                    object temp = args[0];
                    args[0] = args[1];
                    args[1] = temp;
                    return(fn(newArgs));
                }
            }

            return(NewFunction);
        }
示例#2
0
        /// <summary>
        /// Returns a new function much like the supplied one, except that the first two arguments' order is reversed.
        /// </summary>
        /// <code>
        /// int[] mergeThree(params int[] args)
        /// {
        ///     return args;
        /// }
        /// R.Flip{int, int[]}(mergeThree)(1, 2, 3) // => { 2, 1, 3}
        /// </code>
        public static VariadicFunction <T, K> Flip <T, K>(VariadicFunction <T, K> fn)
        {
            K NewFunction(params T[] args)
            {
                if (args.Length == 0)
                {
                    return(fn(args));
                }
                if (args.Length == 1)
                {
                    return(fn(args));
                }
                else
                {
                    T[] newArgs = new T[args.Length];
                    Array.Copy(args, newArgs, args.Length);
                    T temp = newArgs[0];
                    newArgs[0] = newArgs[1];
                    newArgs[1] = temp;
                    return(fn(newArgs));
                }
            }

            return(NewFunction);
        }