@@ -18,8 +18,10 @@ public abstract class FunctionBase
1818 /// 进行计算
1919 /// </summary>
2020 /// <param name="work"></param>
21+ /// <param name="parameterFun"></param>
22+ /// <param name="diyFun"></param>
2123 /// <returns></returns>
22- public abstract Operand Calculate ( AlgorithmEngine work ) ;
24+ public abstract Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null ) ;
2325
2426 /// <summary>
2527 /// Returns a string that represents the current object.
@@ -179,10 +181,10 @@ public Function_Mul(FunctionBase func1, FunctionBase func2) : base(func1, func2)
179181 {
180182 }
181183
182- public override Operand Calculate ( AlgorithmEngine work )
184+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
183185 {
184- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
185- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
186+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
187+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
186188
187189 if ( args1 . IsText ) {
188190 if ( decimal . TryParse ( args1 . TextValue , NumberStyles . Any , CultureInfo . InvariantCulture , out decimal d ) ) {
@@ -245,10 +247,10 @@ public Function_Div(FunctionBase func1, FunctionBase func2) : base(func1, func2)
245247 {
246248 }
247249
248- public override Operand Calculate ( AlgorithmEngine work )
250+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
249251 {
250- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
251- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
252+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
253+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
252254
253255 if ( args1 . IsText ) {
254256 if ( decimal . TryParse ( args1 . TextValue , NumberStyles . Any , CultureInfo . InvariantCulture , out decimal d ) ) {
@@ -300,10 +302,10 @@ public Function_Mod(FunctionBase func1, FunctionBase func2) : base(func1, func2)
300302 {
301303 }
302304
303- public override Operand Calculate ( AlgorithmEngine work )
305+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
304306 {
305- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
306- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
307+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
308+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
307309
308310 if ( args1 . IsText ) {
309311 if ( decimal . TryParse ( args1 . TextValue , NumberStyles . Any , CultureInfo . InvariantCulture , out decimal d ) ) {
@@ -354,10 +356,10 @@ public Function_Add(FunctionBase func1, FunctionBase func2) : base(func1, func2)
354356 {
355357 }
356358
357- public override Operand Calculate ( AlgorithmEngine work )
359+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
358360 {
359- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
360- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
361+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
362+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
361363
362364 if ( args1 . IsText ) {
363365 if ( decimal . TryParse ( args1 . TextValue , NumberStyles . Any , CultureInfo . InvariantCulture , out decimal d ) ) {
@@ -419,10 +421,10 @@ public Function_Sub(FunctionBase func1, FunctionBase func2) : base(func1, func2)
419421 {
420422 }
421423
422- public override Operand Calculate ( AlgorithmEngine work )
424+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
423425 {
424- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
425- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
426+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
427+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
426428
427429 if ( args1 . IsText ) {
428430 if ( decimal . TryParse ( args1 . TextValue , NumberStyles . Any , CultureInfo . InvariantCulture , out decimal d ) ) {
@@ -482,10 +484,10 @@ public Function_Connect(FunctionBase func1, FunctionBase func2) : base(func1, fu
482484 {
483485 }
484486
485- public override Operand Calculate ( AlgorithmEngine work )
487+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
486488 {
487- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
488- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
489+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
490+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
489491
490492 if ( args1 . IsNull ) {
491493 if ( args2 . IsNull ) return args1 ;
@@ -518,10 +520,10 @@ public Function_EQ(FunctionBase func1, FunctionBase func2) : base(func1, func2)
518520 {
519521 }
520522
521- public override Operand Calculate ( AlgorithmEngine work )
523+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
522524 {
523- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
524- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
525+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
526+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
525527
526528 if ( args1 . Type == args2 . Type ) {
527529 if ( args1 . IsNumber ) {
@@ -583,10 +585,10 @@ public Function_NE(FunctionBase func1, FunctionBase func2) : base(func1, func2)
583585 {
584586 }
585587
586- public override Operand Calculate ( AlgorithmEngine work )
588+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
587589 {
588- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
589- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
590+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
591+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
590592
591593 if ( args1 . Type == args2 . Type ) {
592594 if ( args1 . IsNumber ) {
@@ -648,10 +650,10 @@ public Function_GE(FunctionBase func1, FunctionBase func2) : base(func1, func2)
648650 {
649651 }
650652
651- public override Operand Calculate ( AlgorithmEngine work )
653+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
652654 {
653- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
654- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
655+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
656+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
655657
656658 if ( args1 . Type == args2 . Type ) {
657659 if ( args1 . IsNumber ) {
@@ -716,10 +718,10 @@ public Function_LE(FunctionBase func1, FunctionBase func2) : base(func1, func2)
716718 {
717719 }
718720
719- public override Operand Calculate ( AlgorithmEngine work )
721+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
720722 {
721- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
722- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
723+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
724+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
723725
724726 if ( args1 . Type == args2 . Type ) {
725727 if ( args1 . IsNumber ) {
@@ -785,10 +787,10 @@ public Function_GT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
785787 {
786788 }
787789
788- public override Operand Calculate ( AlgorithmEngine work )
790+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
789791 {
790- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
791- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
792+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
793+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
792794
793795 if ( args1 . Type == args2 . Type ) {
794796 if ( args1 . IsNumber ) {
@@ -853,10 +855,10 @@ public Function_LT(FunctionBase func1, FunctionBase func2) : base(func1, func2)
853855 {
854856 }
855857
856- public override Operand Calculate ( AlgorithmEngine work )
858+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
857859 {
858- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsError ) { return args1 ; }
859- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
860+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsError ) { return args1 ; }
861+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
860862
861863 if ( args1 . Type == args2 . Type ) {
862864 if ( args1 . IsNumber ) {
@@ -926,13 +928,13 @@ public Function_AND(FunctionBase func1, FunctionBase func2) : base(func1, func2)
926928 {
927929 }
928930
929- public override Operand Calculate ( AlgorithmEngine work )
931+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
930932 {
931933 // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别
932934 // 在excel内 AND(x,y) OR(x,y) 先报错,
933935 // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错
934936 // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错
935- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsNotBoolean ) { args1 = args1 . ToBoolean ( ) ; if ( args1 . IsError ) { return args1 ; } }
937+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsNotBoolean ) { args1 = args1 . ToBoolean ( ) ; if ( args1 . IsError ) { return args1 ; } }
936938 if ( args1 . BooleanValue == false ) return Operand . False ;
937939 return func2 . Calculate ( work ) . ToBoolean ( ) ;
938940 }
@@ -952,13 +954,13 @@ public Function_OR(FunctionBase func1, FunctionBase func2) : base(func1, func2)
952954 {
953955 }
954956
955- public override Operand Calculate ( AlgorithmEngine work )
957+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
956958 {
957959 // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别
958960 // 在excel内 AND(x,y) OR(x,y) 先报错,
959961 // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错
960962 // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错
961- var args1 = func1 . Calculate ( work ) ; if ( args1 . IsNotBoolean ) { args1 = args1 . ToBoolean ( ) ; if ( args1 . IsError ) { return args1 ; } }
963+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ; if ( args1 . IsNotBoolean ) { args1 = args1 . ToBoolean ( ) ; if ( args1 . IsError ) { return args1 ; } }
962964 if ( args1 . BooleanValue ) return Operand . True ;
963965 return func2 . Calculate ( work ) . ToBoolean ( ) ;
964966 }
@@ -979,7 +981,7 @@ public Function_AND_N(FunctionBase[] funcs) : base(funcs)
979981 {
980982 }
981983
982- public override Operand Calculate ( AlgorithmEngine work )
984+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
983985 {
984986 var index = 1 ;
985987 bool b = true ;
@@ -1003,7 +1005,7 @@ public Function_OR_N(FunctionBase[] funcs) : base(funcs)
10031005 {
10041006 }
10051007
1006- public override Operand Calculate ( AlgorithmEngine work )
1008+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
10071009 {
10081010 var index = 1 ;
10091011 bool b = false ;
@@ -1031,18 +1033,18 @@ public Function_VLOOKUP(FunctionBase func1, FunctionBase func2, FunctionBase fun
10311033 {
10321034 }
10331035
1034- public override Operand Calculate ( AlgorithmEngine work )
1036+ public override Operand Calculate ( AlgorithmEngine work , Func < string , Operand > parameterFun = null , Func < string , List < Operand > , Operand > diyFun = null )
10351037 {
1036- var args1 = func1 . Calculate ( work ) ;
1038+ var args1 = func1 . Calculate ( work , parameterFun , diyFun ) ;
10371039 args1 = args1 . ToArray ( "Function '{0}' parameter {1} is error!" , "VLOOKUP" , 1 ) ; if ( args1 . IsError ) { return args1 ; }
10381040
1039- var args2 = func2 . Calculate ( work ) ; if ( args2 . IsError ) { return args2 ; }
1040- var args3 = func3 . Calculate ( work ) ;
1041+ var args2 = func2 . Calculate ( work , parameterFun , diyFun ) ; if ( args2 . IsError ) { return args2 ; }
1042+ var args3 = func3 . Calculate ( work , parameterFun , diyFun ) ;
10411043 args3 = args3 . ToNumber ( "Function '{0}' parameter {1} is error!" , "VLOOKUP" , 3 ) ; if ( args3 . IsError ) { return args3 ; }
10421044
10431045 var vague = true ;
10441046 if ( func4 != null ) {
1045- var args4 = func4 . Calculate ( work ) ;
1047+ var args4 = func4 . Calculate ( work , parameterFun , diyFun ) ;
10461048 args4 = args4 . ToBoolean ( "Function '{0}' parameter {1} is error!" , "VLOOKUP" , 4 ) ; if ( args4 . IsError ) { return args4 ; }
10471049 vague = args4 . BooleanValue ;
10481050 }
0 commit comments