Skip to content

Commit e6b8ed9

Browse files
author
linzhijun
committed
fix
1 parent 18b5f6f commit e6b8ed9

File tree

8 files changed

+660
-643
lines changed

8 files changed

+660
-643
lines changed

csharp/ToolGood.Algorithm/Internals/Functions/FunctionBase.cs

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)