针对SWITH函数的增强

楼主
我是社区第429104位番薯,欢迎点我头像关注我哦~
package plus;

import com.fr.function.SWITCH;
import com.fr.general.ComparatorUtils;
import com.fr.script.Calculator;
import com.fr.stable.Primitive;
import com.fr.stable.UtilEvalError;
import com.fr.stable.script.Node;

public class SwitchExtension extends SWITCH {
    @Override
    public Object evalExpression(Node[] args) throws UtilEvalError {
        if (args.length < 2) {
            return Primitive.ERROR_NAME;
        } else {
            Calculator calculator = this.getCalculator();
            Object cal = calculator.evalValue(args[0]);
            int argsLength=args.length;

            for(int i = 1; i < (argsLength%2==0?argsLength-1:argsLength); i += 2) {//新增判断是否有默认值
                Object var5 = calculator.evalValue(args);
                if (ComparatorUtils.equals(cal, var5) && i + 1 < args.length) {
                    return calculator.eval(args[i + 1]);
                }
            }
            if(argsLength%2==0) {
                return calculator.eval(args[argsLength-1]);//无符合条件的结果情况下且有默认值则采用默认值
            }
            return Primitive.NULL;
        }
    }
}
分享扩散:

沙发
发表于 2020-9-27 14:33:35
用法参照https://help.fanruan.com/finereport/doc-view-698.html中的3.3
示例:switchplus(表达式,结果1,值2,结果2...[,默认值])
如果表达式的结果是值1,整个函数返回结果1
如果表达式的结果是值2,整个函数返回结果2
如果表达式的结果是值3,整个函数返回结果3等等
如果无相符的结果且有默认值,则返回默认值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表